Python 网络爬虫常用库与正则表达式实战指南
引言
在数据抓取与分析领域,Python 凭借其丰富的生态系统和简洁的语法,成为了编写网络爬虫的首选语言。网络爬虫的核心流程通常包括:发送 HTTP 请求、解析网页内容、提取目标数据以及存储数据。本文将系统性地介绍 Python 中常用的爬虫库,并深入讲解正则表达式(Re)在数据清洗中的应用,帮助开发者构建高效、稳定的数据采集方案。
本文详细汇总了 Python 网络爬虫开发中常用的核心库,涵盖请求库如 requests 和 aiohttp,解析库如 BeautifulSoup 和 lxml,以及存储框架 Scrapy。重点讲解了正则表达式 re 模块的常用函数与用法,包括 search、match、findall 等,并提供了实际代码示例。此外,文章还补充了反爬虫应对策略、异常处理机制及法律合规建议,旨在为开发者提供一份完整的技术参考指南。

在数据抓取与分析领域,Python 凭借其丰富的生态系统和简洁的语法,成为了编写网络爬虫的首选语言。网络爬虫的核心流程通常包括:发送 HTTP 请求、解析网页内容、提取目标数据以及存储数据。本文将系统性地介绍 Python 中常用的爬虫库,并深入讲解正则表达式(Re)在数据清洗中的应用,帮助开发者构建高效、稳定的数据采集方案。
请求库负责与服务器建立连接并获取响应数据。选择合适的请求库能显著提升爬取效率。
urllib 是 Python 标准库的一部分,无需安装即可使用。它包含了一系列用于操作 URL 的功能模块,如 urllib.request 用于处理 HTTP 请求,urllib.parse 用于解析 URL。
特点:
示例代码:
import urllib.request
response = urllib.request.urlopen('http://www.example.com')
data = response.read()
print(data.decode('utf-8'))
requests 是基于 urllib 封装的高级 HTTP 库,是目前最流行的 Python 请求库。它提供了简洁的 API,支持会话保持、Cookie 管理、代理设置等功能。
特点:
示例代码:
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://www.example.com', headers=headers)
print(response.status_code)
print(response.text)
selenium 是一个自动化测试工具,但在爬虫中常用于处理 JavaScript 渲染的页面或需要模拟用户交互(如点击登录、输入验证码)的场景。
特点:
aiohttp 是基于 asyncio 实现的异步 HTTP 框架。利用 async/await 关键字,可以并发发起大量请求,极大提高数据抓取效率。
特点:
示例代码:
import aiohttp
import asyncio
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = ['http://www.example.com'] * 10
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
print(results)
if __name__ == '__main__':
asyncio.run(main())
获取 HTML 源码后,需要解析库来定位和提取所需数据。
BeautifulSoup 是一款强大的 HTML/XML 解析器,提供多种解析方式(如 lxml, html.parser)。它通过 DOM 树结构查找标签,API 简单易用。
特点:
示例代码:
from bs4 import BeautifulSoup
html_doc = '<html><head><title>Test</title></head><body><p id="demo">Hello</p></body></html>'
soup = BeautifulSoup(html_doc, 'lxml')
print(soup.find('p')['id'])
lxml 是 libxml2 和 libxslt 的 Python 绑定,支持 HTML 和 XML 解析,且支持 XPath 查询。
特点:
pyquery 是 jQuery 的 Python 实现,允许开发者使用熟悉的 jQuery 语法来操作 HTML 文档。
特点:
tesserocr 是一个 OCR(光学字符识别)库,主要用于识别图片中的文字。在处理图形验证码时非常有用。
Scrapy 是一个功能强大的开源爬虫框架,遵循 MVC 架构,内置了下载器、中间件、管道等组件。
适用场景:
注意: 对于动态加载严重或逻辑极其复杂的页面,可能需要结合 Selenium 使用。
爬虫后端常需搭建 API 服务,以下框架可用于构建数据接口:
正则表达式(Regular Expression)是处理字符串匹配的强大工具。Python 的 re 模块提供了完整的正则支持。
import rer'text',避免转义符冲突。在一个字符串中搜索匹配正则表达式的第一个位置,返回 match 对象。
import re
pattern = r'\d{3}'
string = 'abc123def'
match = re.search(pattern, string)
if match:
print(match.group()) # 输出 123
从字符串开头开始匹配,如果开头不匹配则返回 None。
match = re.match(r'\w+', 'Hello World')
print(match.group()) # Hello
搜索所有匹配的子串,返回列表。
matches = re.findall(r'\w+', 'Hello World')
print(matches) # ['Hello', 'World']
按正则表达式分割字符串。
parts = re.split(r'[ ,]', 'Hello, World')
print(parts) # ['Hello', 'World']
替换匹配的子串。
result = re.sub(r'\d', '*', 'Phone: 123456')
print(result) # Phone: *****
预编译正则表达式,提高效率。
regex = re.compile(r'\w*o\w*')
content = 'Hello, I am Jerry, from Chongqing'
x = regex.findall(content)
print(x) # ['Hello', 'from', 'Chongqing']
re.I / re.IGNORECASE:忽略大小写。re.M / re.MULTILINE:多行模式,^ 和 $ 匹配每行的首尾。re.S / re.DOTALL:让 . 匹配包括换行符在内的所有字符。time.sleep() 控制请求频率。网络请求可能因超时、断网等原因失败,应使用 try-except 块捕获异常。
try:
response = requests.get(url, timeout=5)
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.RequestException as e:
print(f"请求错误:{e}")
Python 爬虫技术涵盖了网络通信、HTML 解析、数据存储等多个方面。掌握 requests、BeautifulSoup、Scrapy 等核心库,并结合正则表达式进行精细的数据清洗,是构建高质量爬虫系统的基础。在实际开发中,应根据具体需求选择合适的工具组合,并始终关注代码的健壮性与合规性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online