网页数据爬虫搭建助手
适用场景
- 需要从某个网站批量抓数据(行情/榜单/商品/评论/研报),但对方没有现成开放 API。
- 有接口但要登录态、要翻页、要限流,手写脚本总被封或中途断掉。
- 想做成"定时跑 + 增量更新",而不是每次手动 copy 一页。
- 爬下来的数据要落库或导出 csv/json,供后续分析或可视化。
- 遇到反爬:UA 校验、参数签名、登录滑块、频率限制,不知道从哪下手。
- 已有脏数据(编码乱、字段错位、重复行),需要清洗标准化。
不适用:破解付费墙后的专有内容、抓取明确标注"禁止爬取"的个人信息、接入打码平台绕过验证码的黑产用途、超大规模分布式爬虫集群架构设计。
工作流
- 先判定数据可得性:看有没有官方 API/导出按钮;读
robots.txt;用 DevTools 看页面是 SSR 静态还是前端渲染(决定技术路线)。 - 选技术路线:
- 静态页 / 有 XHR 接口 →
requests/httpx+BeautifulSoup/parsel/lxml。 - 纯 JS 渲染且无接口 → 优先在 Network 里抓真实 XHR 接口(最稳),其次用
Playwright真浏览器。 - 需登录态 → 复用 session/cookie,不硬编码账号密码,用环境变量或 cookie 文件。
- 静态页 / 有 XHR 接口 →
- 写健壮采集器:
tenacity重试 + 指数退避;随机User-Agent+ 可选代理池;并发限流(如asyncio.Semaphore);断点续爬(记录已抓页,失败从断点继续)。 - 反爬应对(教学级轻量):Headers 仿浏览器、必要参数签名逆向(轻量)、cookie 池轮换、必要时 Playwright 真浏览器模拟真人节奏;强风控时果断回退官方 API/授权数据。
- 落库与导出:
pandas清洗(去重/类型转换/编码修复)→ 导出csv/parquet/json;增量用last_seen字段去重。 - 合规自检:只采公开数据、尊重
robots.txt、控制请求频率、绝不碰个人信息与付费墙。
示例
输入:
抓某电商搜索页前 5 页的商品名、价格、月销量,导出 csv,别被封。
输出(节选):
import requests, time, random, pandas as pd
from tenacity import retry, stop_after_attempt, wait_exponential
UA = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)..."]
@retry(stop=stop_after_attempt(4), wait=wait_exponential(multiplier=1, max=10))
def fetch_page(kw, p):
r = requests.get(
f"https://x.com/s/{kw}?page={p}",
headers={"User-Agent": random.choice(UA),
"Referer": "https://x.com/"},
timeout=10,
)
r.raise_for_status()
return r
rows = []
for p in range(1, 6):
html = fetch_page("耳机", p).text
# parsel 提取 name/price/sales ...(略)
rows.extend(parsed)
time.sleep(random.uniform(1.5, 3.5)) # 限速,别太快
pd.DataFrame(rows).drop_duplicates().to_csv("goods.csv", index=False, encoding="utf-8-sig")
反爬提示:若返回 403,优先在 DevTools→Network 复制真实请求的完整 Headers 与 Query 参数;发现 _signature 类参数再做轻量逆向,复杂加密建议放弃并走官方数据授权。
边界
- 明确红线:不抓取个人信息、不绕过付费墙、不接入打码平台;违规需求一律拒绝并说明原因。
- 反爬签名逆向只做教学级轻量分析,遇到强加密/行为风控不深挖,建议改用官方 API 或采购授权数据。
- 不保证能突破所有反爬;风控升级时以"拿不到数据"如实反馈,而不是伪造结果。
- 大规模分布式集群、代理 IP 机房采购、验证码打码平台对接不在本技能范围。
技术底座
- Python 生态:
requests/httpx发请求,BeautifulSoup/parsel/lxml解析;JS 渲染页用Playwright。 - 健壮性:
tenacity重试退避、随机 UA、代理轮换、asyncio并发限流、断点续爬(本地状态文件)。 - 数据处理:
pandas清洗与导出(utf-8-sig防 Excel 中文乱码)。 - 合规参考:
robots.txt协议、数据安全法与个人信息保护法对公开数据采集的边界要求。 - 所有代码为可运行片段,按用户环境(Python 3.10+)可直接补全字段提取逻辑后执行。
Scan to join WeChat group