跳转至

Python 爬虫

概念与用途

爬虫获取网页、解析结构、去重链接并持久化数据。适合公开数据采集和授权监测;动态页面可能需要浏览器或直接调用公开 API。

本页示例建议 python -m pip install "beautifulsoup4>=4.12" "requests>=2.31"。真实采集需要网络、明确授权和可识别 User-Agent;解析本地 HTML 不依赖外部服务。

核心 API

常见组合是 Requests 获取内容、Beautiful Soup 解析 HTML。请求需设置 User-Agent、超时和限速,链接应使用 urljoin() 解析。

from bs4 import BeautifulSoup

html = "<ul><li><a href='/a'>Python</a></li><li><a href='/b'>安全</a></li></ul>"
soup = BeautifulSoup(html, "html.parser")
for link in soup.select("li > a[href]"):
    print(link.get_text(strip=True), link["href"])

流程与边界

阶段 工具 工程要求
获取 Requests/httpx 超时、限速、重试上限
解析 Beautiful Soup/lxml 输入大小和编码
去重 set/数据库 URL 规范化
存储 文件/数据库 schema、事务、清理

示例:规范化相对链接

from urllib.parse import urljoin, urlparse

base = "https://example.com/docs/index.html"
for href in ("../about", "/help", "https://other.example/x"):
    absolute = urljoin(base, href)
    parsed = urlparse(absolute)
    print(parsed.netloc, absolute)

HTTP Session 和响应应关闭,数据库事务应提交或回滚。遵循 robots 并不自动构成法律授权;涉及个人数据、登录态或访问控制时必须先取得明确许可。

常见错误与安全注意

  • 采集前检查授权、服务条款、robots 和适用法律,并实现礼貌限速。
  • 不要信任下载内容、文件名或跳转地址,需防 SSRF、路径穿越和恶意文件。
  • 页面结构会变化,解析器应有测试、监控、重试上限和失败样本。