1
mywaiting 2022-04-18 18:14:41 +08:00
爬虫不都是 requests 一把梭,一连串的 if else 就写完了么?
|
4
binux 2022-04-19 01:10:51 +08:00 via Android
因为之后我自己也没有使用场景,就没有维护了。
|
5
Kobayashi 2022-04-19 05:49:38 +08:00 via Android
这还用选吗,当然是 Scrapy 。爬虫不需要可视化,这是伪需求,懂 XPath 和 CSS 选择器语法就够了。
说 requests 的可能是没写过大量爬虫,爬虫从来都不是一个 HTTP 下载+HTML 解析问题。当你做大量爬取时,你要考虑各种其他设计: 1. 队列,生成的待爬取 URL 越来越多,需要队列存储待爬 2. 队列是支持先入先出还是先入后出,直接对应深度优先爬取和广度优先爬取 3. 爬取中断了如何恢复,是支持队列固化还是使用 Redis 做队列 4. 如何针对被爬 URL 去重,同样去重指纹怎么固化 5. 避免频率过高爬取时,钱多直接上代理池,免费先做并发控制、人工时延。或者多开几台机器搞分布式。 6. 人工时延是针对 IP 还是 host ,要不要加随机抖动 7. 如果不考虑 IP 被封,高并发爬取是线程池还是异步。 8. 对于偶发的网络问题导致的 HTTP 请求失败,要不要加入自动重试。 9. 或者更扯淡一点,为了避免发散爬取时进入对方蜜罐爬取大量无用连接,耗尽连接池。如何做深度控制。 10. …… 还有各种各样的问题,Scrapy 和 Scrapy 插件提供了现成的解决方案。 |
6
l0wkey OP @Kobayashi #5 嗯 我主要是觉得 scrapy 太重了.. 写个小爬虫的情况下,比如之前 pyspider 写个小爬虫连存储都不需要自己搞。scrapy 肯定可以实现,但是多数情况下都需要单独选择插件,集成再测试
|
7
Kobayashi 2022-04-19 10:36:49 +08:00
嗯…… cookiecutter 配合 Scrapy 搭个脚手架,或者反过来配合 requests/httpx/aiohttp 搭个脚手架?
实话说,我尝试过的爬虫框架也不多,有时间你可以去尝试一些新框架。先帮你排个雷:ruia 。国人搞得自称 asyncio 版 scrapy ,读过二者源码,只能说借鉴了几个类名,框架运行逻辑完全不像,扩展程度天壤之别。 |