Python爬虫策略有哪些?
目前在做一个爬虫,老板的要求是要我抓取网页和解析分开,也就是把网页的正文全部保存下来,解析可以延后。
想问问你们的策略是抓取和解析放在一起了还是分开了?
以后的爬虫数据更新是如何更新?全部更新?
Python爬虫策略有哪些?
呃呃,没有老哥解解惑吗。。
Python爬虫策略主要围绕如何高效、稳定、合法地抓取数据。核心策略包括:
-
请求策略:
- 轮换User-Agent和IP(使用代理池)绕过反爬
- 设置合理请求间隔(time.sleep随机延时)
- 使用Session保持会话,复用cookies
-
解析策略:
- HTML解析:BeautifulSoup/lxml处理静态页面
- 动态渲染:Selenium/Playwright处理JS加载内容
- API直连:通过浏览器开发者工具抓取XHR/Fetch请求
-
架构策略:
- 增量爬取:记录已抓URL,避免重复请求
- 分布式爬虫:Scrapy-Redis实现多机协同
- 异步加速:aiohttp/httpx提升并发效率
-
反反爬策略:
- 模拟人类操作轨迹(鼠标移动、滚动)
- 处理验证码(第三方打码平台/OCR识别)
- 遵守robots.txt,设置合法爬取频率
简单说就是:根据目标网站特点组合使用这些技术。
分开,近期的内容定时更新
分开,出问题的时候调试起来方便得多
肯定是分开啊,没用框架吗?比如 python 的 scrapy,java 的 webmagic ?
另外更新的话区分更新和新增吧,维护一个 redis 就行了
更新的话如果数据量小可以考虑 set,然后数据量大就用数据库
没用框架。
我还想问下解析
多网站的爬虫如何制作的?对爬取的网站设置一个标签,使用不同的解析方法吗?
分开是个不错的办法。
SEDA 了解一下。
分开。
不仅是调试的问题。
保存原始的 HTML 信息以后再做数据分析会方便很多。
数据量大的话推荐一下 http://www.infoq.com/cn/presentations/tera-in-the-ten-thousand-level-real-time-search-framework?utm_source=InfoQ&utm_medium=zones 百度的这个讲座。里面有很多干货了。
楼上讲的 scrapy 和 webmagic 在某些意义上还是抓取和解析是没有分开的,默认 /大多数用户都是在 memory 里面倒腾,一个抓取和解析分开的例子应该是 nutch。
目前我们面向大约 1kw URL,准备模仿百度的这一套架构搞一搞。
抓取+入 hbase,三天更新一次。目前抓取速度不是问题,都是可以通过加机器解决的。现在我们在想的是怎么基于这 1kw HTML 做一些安全上的研究。
所谓的分开是指先把页面爬取出来,之后再从页面中提取数据吗?
是这样的,解析出错就不用重新抓数据了
抓取网页之后, 丢到解析 worker 的队列去, 可以做成实时的。
期待后续的分享
当然是职责分离呀
如果只是简单的页面,比如就是抓取独立的 Url,而且抓的数据量非常大,或者解析工作非常大(比如搜索引擎),抓取与解析分开会好点;
如果抓取逻辑比较复杂,比如要抓取 c 页面,要经过 a->b->c,那最好写在一块,因为如果解析逻辑分开的话,你要写 3 个有强相关的解析代码,从部署与维护的角度看太复杂了。
我们是放一起的。只保存清洗过的内容。如果需要调试的话,就找原网页 url 调…
我觉得抓取和解析分开。
最好是做成异步,把抓取的数据放在全局队列里,解析的进程另外单独处理,一方面有助于架构分离,另一方面分开的逻辑便于将来横向扩展。
https://tweetyf.org/p/359
我也写过一些,不过后来没有时间搞完,希望有时间可以和楼主多交流爬虫和搜索引擎的只是。


