跳转至

python网页爬虫

F12提取关键请求信息

准备阶段

打开目标网页(确保需爬取的内容已显示)
按 F12(或 Ctrl+Shift+I)调出开发者工具
切换至「Network(网络)」面板,勾选「Preserve log(保留日志)」

目标请求快速排查

一、必查正向特征(符合越多,越可能是目标请求)
URL 包含关键词:data、list、api、query、get、fetch、info、content、item、detail
请求方法:GET/POST(多数数据接口用这两种,PUT/DELETE 可暂不优先关注)
Response 格式:JSON(最易解析)或 HTML 片段(含目标文本 / 数值)
响应大小:大于 1KB(数据量通常比静态资源大,排除几十字节的无效请求)
参数关联性:URL/Payload 含与目标相关的参数(如 id、page、keyword、category)
二、快速排除无效请求(直接跳过这类 XHR)
URL 含静态资源标识:icon、img、image、css、js、font、svg、png、jpg
响应状态码:404(不存在)、403(无权限,暂不处理)、500(服务器错误)
响应内容:空数据、纯广告信息、统计类数据(如 pv/uv、埋点数据)
命名无意义:URL 含随机字符串(如 “a1b2c3”)且 Response 无目标关键词
请求类型关联:与页面操作无关(如未点击 “加载更多” 却出现的分页请求)
三、目标数据验证三步法(确认是否为最终目标)
打开请求的「Response」面板,按 Ctrl+F 搜索目标关键词(如商品名、价格、文章标题)
若搜索到,核对数据格式是否完整(如 JSON 中字段是否齐全,HTML 是否含完整内容)
复制 Request URL 到浏览器新标签页,访问后确认返回数据与面板一致(排除临时失效接口)
四、紧急排查技巧(卡顿时用)
清空 Network 日志(点击「Clear」图标),重新触发数据加载(刷新 / 点击按钮),只看新出现的 XHR
若仍找不到,切换「Filter」为 “All”,再按 “Size” 列倒序排序,优先查看大体积请求
用「Preview」面板快速浏览 JSON 结构,重点看 “data”“result”“list” 节点下的内容

提取关键信息

点击目标请求,查看「Headers(请求头)」
复制「Request URL」(爬虫请求地址)
记录请求方法(GET/POST)
提取必要参数:GET 从「Query String Parameters」获取,POST 从「Payload」获取
复制关键请求头(User-Agent、Cookie、Referer 等,用于模拟浏览器)
切换至「Response(响应)」面板
确认数据格式(JSON/HTML)及完整性(与网页显示内容一致)
复制响应数据备用(用于验证爬虫返回结果)

验证与备用方案

若接口数据完整:直接用提取的 URL、参数、请求头开发爬虫
若接口无目标数据:切换至「Elements(元素)」面板,复制对应 HTML 节点(静态页面适用)
测试接口:复制 Request URL 到浏览器地址栏,验证是否能正常返回数据

反爬配置准备

整理请求头信息,确保爬虫包含 User-Agent、Cookie 等关键字段
记录参数规则(如时间戳、签名等动态参数,需后续模拟生成)

基础网络请求工具

用于发送 HTTP/HTTPS 请求,获取网页原始数据(HTML、JSON 等)。 requests 最常用的 HTTP 库,语法简洁,支持 GET/POST、会话保持、代理、Cookie、超时设置等。
适合爬取静态页面(内容在初始 HTML 中),是爬虫入门首选。

解析工具(处理请求返回的数据)

用于从 HTML/XML/JSON 中提取目标信息(如文本、链接、属性等),前文已提及,此处简要汇总:
BeautifulSoup:解析 HTML/XML,容错性强,适合简单结构。
lxml:高效解析库,支持 XPath 和标签树操作,速度快,适合复杂结构。
PyQuery:模仿 jQuery 语法,支持 CSS 选择器,适合前端开发者。
json 库:解析 JSON 数据(接口返回的结构化数据常用)。
re(正则表达式):辅助提取固定格式内容(如手机号、邮箱)。

动态页面爬取工具(JavaScript 渲染内容)

针对 JavaScript 动态加载的内容(如异步加载、点击后生成的内容),普通请求工具无法直接获取,需模拟浏览器行为。

Selenium

自动化测试工具,可控制真实浏览器(Chrome、Firefox 等)执行点击、输入等操作,获取渲染后的完整页面。
支持无头模式(无界面运行),适合处理复杂交互场景(如登录、滑块验证)。

1
2
3
4
5
6
7
8
9
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")
print(driver.page_source)  # 渲染后的 HTML
driver.quit()

Playwright

微软推出的自动化工具,支持 Chrome、Firefox、WebKit 浏览器,API 更简洁,内置等待机制,稳定性优于 Selenium。
支持同步 / 异步两种模式,适合处理现代前端框架(React、Vue)生成的动态页面。

1
2
3
4
5
6
7
from playwright.sync import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.content())  # 渲染后的 HTML
    browser.close()

爬虫框架(简化复杂爬虫开发)

封装了请求、解析、去重、存储、代理等功能,适合大规模、结构化爬取。

Scrapy

最成熟的 Python 爬虫框架,功能全面:支持并发请求、自动去重(基于指纹)、分布式爬取(结合 Scrapy-Redis)、自定义中间件(处理代理、登录等)。 适合爬取大型网站,遵循 “管道(Pipeline)” 设计,数据提取(Item)和存储(如 MySQL、MongoDB)分离。 示例(创建爬虫):

1
2
scrapy startproject myspider  # 创建项目
scrapy genspider example example.com  # 生成爬虫

PySpider

带 Web 界面的爬虫框架,支持可视化编辑、调试和监控,适合快速开发中小型爬虫。 内置分布式支持和任务调度,语法类似 Scrapy 但更简洁。

代理与反反爬工具

应对网站反爬机制(如 IP 封禁、UA 检测、验证码)。

ProxyPool

代理池工具,自动抓取、验证免费代理,提供 API 供爬虫调用,解决 IP 被封问题。
fake_useragent
生成随机 User-Agent,模拟不同浏览器请求,避免因固定 UA 被识别。
示例:

1
2
3
4
from fake_useragent import UserAgent
ua = UserAgent()
headers = {"User-Agent": ua.random}  # 随机 UA
ddddocr / pytesseract
简单验证码识别工具,支持数字、字母、滑块验证码(ddddocr 对中文验证码友好)。

数据存储工具

爬取的数据需持久化存储,常用工具:
文件存储:csv(表格数据)、json(结构化数据)、pandas(数据分析 + 存储)。
数据库:
关系型:MySQL(配合 pymysql 库)、PostgreSQL。
非关系型:MongoDB(配合 pymongo 库,适合存储非结构化数据)、Redis(缓存或分布式爬虫去重)。

其他辅助工具

Fiddler / Charles:抓包工具,分析网页请求(尤其动态页面的 API 接口)。
robots.txt 解析:robots-parser 库,遵守网站爬虫协议。
多线程 / 异步:threading(多线程)、aiohttp(异步请求,提升效率)。

工具选择建议

简单静态页爬取:requests + BeautifulSoup/lxml。
动态页爬取:Playwright(优先)或 Selenium。
大规模 / 结构化爬取:Scrapy。
处理反爬:代理池 + 随机 UA + 验证码识别工具。