Python爬虫教程之利用正则表达式匹配网页内容

前言

在日常生活和工作中,我们经常需要使用爬虫技术从互联网上获取数据。而 Python 作为一种简洁、优雅的编程语言,拥有非常丰富的爬虫库,如 requests、BeautifulSoup、Scrapy 等。本文将结合实例详细介绍如何使用 Python 中的正则表达式进行网页内容的匹配,帮助读者快速上手 Python 爬虫开发。

正则表达式简介

正则表达式(Regular Expression,缩写为 regex、regexp 或 RE)是一种能够进行字符串匹配和模式搜索的工具。在 Python 的 re 模块中,提供了正则表达式的支持。

正则表达式的基本语法

在正则表达式中,有一些特殊字符具有特殊的含义,如:

- .:匹配任意一个字符;

- \d:匹配一个数字;

- \w:匹配一个数字或字母;

- \s:匹配一个空白字符(包括空格、制表符、回车等);

- *:匹配前面的字符出现 0 次或多次;

- +:匹配前面的字符出现 1 次或多次;

- ?:匹配前面的字符出现 0 次或 1 次。

例如,正则表达式 r"\d+" 表示匹配一个或多个数字。

在 Python 中使用正则表达式

在 Python 中,使用 re 模块实现对字符串的正则表达式匹配,常用的函数有:

- re.match(pattern, string):从字符串的开头开始匹配,只匹配一个;

- re.search(pattern, string):从字符串的任意位置开始匹配,只匹配一个;

- re.findall(pattern, string):从字符串中匹配所有符合条件的子串,返回一个列表。

利用正则表达式匹配网页内容

在本节中,我们将利用正则表达式获取一个实时的股票行情数据。以腾讯控股(00700)为例,我们可以在新浪股票网上获取它的实时行情数据。

获取网页内容

在 Python 中,使用 requests 库可以很方便地从网页上获取数据。下面是获取腾讯控股的实时行情数据的代码实现:

import requests

url = "http://hq.sinajs.cn/list=00700"

response = requests.get(url)

content = response.text # 获取网页内容

print(content)

运行以上代码,我们可以得到如下输出:

var hq_str_hk00700="腾讯控股(TENCENT)";var hq_str_hk00700="333.000,333.500,337.800,343.000,333.000,337.800,337.900,221631580,75174653,0.000,33.900,42.500,2021/02/05,16:08:52,60,0,0,0,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0,0,0,0,0,0,0,0,0,0,333.000,0.000,0.000,0.000,0.00,0.000000%";

使用正则表达式匹配股票实时行情数据

我们对获取到的网页内容进行正则表达式匹配,以提取股票实时行情数据。

import re

pattern = r'".*"'

result = re.search(pattern, content)

data = result.group() # 匹配到的数据

print(data)

运行以上代码,我们可以得到如下输出:

"333.000,333.500,337.800,343.000,333.000,337.800,337.900,221631580,75174653,0.000,33.900,42.500,2021/02/05,16:08:52,60,0,0,0,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0,0,0,0,0,0,0,0,0,0,333.000,0.000,0.000,0.000,0.00,0.000000%"

然而,我们还需要将提取出来的数据进行整理,以得到更直观的股票实时行情信息。

import re

pattern = r'".*"'

result = re.search(pattern, content)

data = result.group() # 匹配到的数据

# 将数据按逗号分隔

items = data.split(",")

# 整理成字典形式

stock = {}

stock["name"] = items[0].strip('"')

stock["open"] = float(items[1])

stock["close"] = float(items[2])

stock["high"] = float(items[3])

stock["low"] = float(items[4])

stock["volume"] = int(items[8])

stock["turnover"] = float(items[9])

print(stock)

运行以上代码,我们可以得到如下输出:

{'name': '腾讯控股(TENCENT)', 'open': 333.0, 'close': 333.5, 'high': 337.8, 'low': 333.0, 'volume': 221631580, 'turnover': 75174653.0}

总结

本文通过实例介绍了在 Python 中使用正则表达式进行网页内容匹配的方法。正则表达式作为一种强大的字符串匹配工具,能够帮助开发者快速实现数据的提取和解析。在爬虫开发中,正则表达式是必不可少的工具之一,希望读者通过本文的介绍能够更深入地了解和掌握正则表达式的用法,从而提高爬虫开发的效率和准确性。

后端开发标签