发布于: 2025-1-22最后更新: 2026-5-3字数 1104阅读时长 3 分钟

type
Post
status
Published
date
Jan 22, 2025
slug
爬虫技术入门
summary
我从大学开始写爬虫,工具从 requests 换到 Scrapy 再换到 Playwright。这篇串起来讲讲我用过的几样东西适合什么场景,以及那些踩坑了才记住的经验。
tags
工具
category
技术分享
icon
password
synced
paired_with
3551d487-a2a1-8142-beef-e8f5086de1f0
source_hash
5d0e12b7b17a1653031bac1fd358b3216dead84cfc40e0f0c3d13c9e6e9009e4
translation_locked
translation_locked
💭
我从大学时代开始写爬虫,从最早抓贴吧帖子,到后来抓股价、抓豆瓣、抓 GitHub trending,工具也从 requests 一路换到 Scrapy 再到 Playwright。这篇不是想写成"全网爬虫指南",而是把我自己一路用过的几样东西串起来讲讲,它们各自适合什么场景,以及那些一开始不知道、后来踩坑了才记住的事。

先说合规

写爬虫之前,先看 robots.txt。这是网站告诉爬虫"哪些目录欢迎你、哪些请绕开"的协议,用 Python 检查一下两行就够。
robots.txt 不是法律,不遵守它不会被起诉。但它是网站愿不愿意配合你的信号,你不尊重它,对方就会出手段。那些手段比 robots.txt 烦得多,IP 封禁、加验证码、加 JS 加密、加风控规则,每一项都够你折腾几天。
还有一条,爬来的数据怎么用。爬公开页面拿来分析自己看一般没事,转手卖、用来训练模型、绕开付费墙这些行为可能踩法律红线,自己掂量。

我现在的工具盘

不同场景我会用不同的工具,简单分三档。
第一档,小活快办。requests + BeautifulSoup。一段代码就能拉网页解析出来。
第二档,要并发。aiohttp + asyncio。同时拉几百个 URL 不阻塞。
第三档,要工程化。Scrapy。带调度器、去重、管道、中间件。一个抓取任务能跑几天,断点恢复、限速、写入数据库这些都内置好了。
如果页面是 SPA、内容靠 JS 渲染才出现,这三个都不行,得上无头浏览器。我现在偏 Playwright 多一些,比 Selenium 快,API 也更现代。

反爬这件事

被网站发现你是爬虫之后,一般会按这个顺序拦你。
  1. 看 UA。默认 requests 的 UA 就长得像爬虫,第一时间换成浏览器的 UA 字符串
  1. 看 IP 频率。同一个 IP 短时间内打太多次,封。解法是放慢速度(最简单)或者上代理池(贵但管用)
  1. 看 Cookie / Session。要登录的页面,开个 requests.Session() 把登录态保住
  1. 上验证码。这一步基本就是网站在告诉你"别玩了"。强行硬刚成本极高,OCR 加打码平台一套下来不如直接放弃
代理池写起来不难,难的是养出可用的代理。免费代理基本都死的,付费代理几十块一天起步,看你抓的东西值不值这个钱。

解析的几种姿势

抓回来的 HTML 怎么提数据,主要这几种。
  • BeautifulSoup。最容易上手,写起来像 jQuery
  • lxml + XPath。语法陡一点,但快、稳,结构复杂的页面用它
  • PyQuery。直接 jQuery 语法的 Python 实现,写过前端的会一秒上手
  • 正则。能不用就不用。HTML 是树形结构不是字符串流,强行用正则解析迟早翻车
我一般首选 lxml + XPath,配 Scrapy 用顺手。简单的活直接 BeautifulSoup。

一些经验之谈

写爬虫这么多年,留下来印象最深的不是技术,是这几条。
  1. 慢一点。每个请求之间加 sleep 1 到 3 秒,对方根本不会注意到你。比并发轰炸然后被封,长远收益高很多
  1. 存好原始 HTML。先把完整的 HTML 落到本地,解析过程在本地跑。这样改解析逻辑不用重抓,调试爽十倍
  1. 写好失败重试。网络抖动是常态,每个请求外面套一个最多三次的重试,配指数退避
  1. 别相信 selector。今天 .title 明天可能改成 .article-title。爬虫的脆弱性主要来自页面结构变化,写监控、写报警,比写代码更重要

📎 参考文章


Loading...
游戏中的“着色器正在编译”是什么意思?

游戏中的“着色器正在编译”是什么意思?

玩游戏时看到「正在编译着色器」那个进度条,里面到底在干什么?这篇用人话讲讲着色器是什么、为什么要编译、为什么这么慢。


Statsify Finance 技术解析

💹Statsify Finance 技术解析

Statsify Finance 是我做的一个金融分析工具网站。这篇聊聊为什么做这个项目、网站分了哪几块、底下用了什么技术。


公告
网站持续更新中…