我需要帮助定义一个工具的架构,该工具每天会抓取1000多个大型网站以进行新的更新。
我打算在这个项目中使用Scrapy:
谢谢!
答案 0 :(得分:10)
Scrapy是这个项目的绝佳选择。有关抓取许多(数百万)网站的一些具体建议,请参阅documentation on broad crawls,但只有1000个网站不太重要。您应该只使用一个项目和一个蜘蛛 - 不要生成项目!要么不定义allowed_domains属性,要么确保它仅限于当前正在抓取的域集。您可能希望拆分域,以便每个进程只抓取一个子集,允许您并行化爬网。
您的蜘蛛需要关注当前域中的所有链接,这里是跟随所有链接的an example蜘蛛,以防万一。我不确定你要对raw html做什么处理。您可能希望限制每个网站的深度或页数(例如using depth middleware)。
关于重新访问网站,请参阅delatafetch middleware,了解如何仅提取新网址。也许你可以从那开始并自定义它。
答案 1 :(得分:0)
我将有兴趣看看有什么其他答案。我已经完成了一些网络抓取/报废代码,我自己使用urllib编写代码来获取html然后只是搜索html我需要的东西,但还没有尝试过scrapy。
我想看看是否存在差异,您可能只需要比较之前和新的html网页,但您需要找出要忽略的更改,例如日期等,或者你正在寻找什么具体的变化,除非有一个更简单的方法来使用scrapy做到这一点。
在存储方面,您可以将html数据存储在文件系统中,或者只是将其作为字符串写入数据库。只是像SQLite这样的本地数据库应该可以正常工作,但还有很多其他选择。
最后,我还建议您查看您计划抓取的网站上的条款,并检查robots.txt中的指导(如果包含在html中),因为有些网站会指导他们对此感到满意的频率网络爬虫使用它们等。