我需要帮助定义一个工具的架构,该工具将每天抓取 1000 多个大型网站以获取新的更新。
我打算在这个项目中使用 Scrapy:
- 假设 Scrapy 需要为每个网站创建一个项目,我该如何处理抓取 1000 多个网站并将其数据与 Scrapy 存储在一个项目中?我尝试添加一个项目生成器,但这是个好主意吗?
- 我如何判断一个网站是否更新了新内容,以便我可以再次抓取它?
谢谢!
Scrapy 是这个项目的绝佳选择。有关抓取许多(数百万个)网站的具体建议,请参阅关于广泛抓取的文档,但对于只有 1000 个网站,它并不那么重要。你应该只使用一个项目和一个蜘蛛——不要生成项目!要么不定义allowed_domains属性,要么确保它仅限于当前正在爬网的域集。您可能希望拆分域,以便每个进程只爬取一个子集,从而允许您并行化爬取。
您的蜘蛛需要跟踪当前域中的所有链接,这是一个跟踪所有链接的示例蜘蛛,以防万一。我不确定您要对原始 html 进行什么处理。您可能希望限制每个站点的深度或页面数量(例如使用深度中间件)。
关于重新访问网站,请参阅delatafetch 中间件作为如何处理仅获取新 URL 的示例。也许您可以从它开始并对其进行自定义。
我很想看看对此有什么其他答案。我已经使用 urllib 自己编写的代码进行了一些网络爬取/报废以获取 html,然后只是在 html 中搜索我需要的内容,但还没有尝试过scrapy。
我想看看是否存在差异,您可能只需要比较以前的和新的 html 页面,但是您需要找出要忽略的更改,例如日期等,或者您正在寻找哪些特定更改,除非有使用scrapy更简单的方法来做到这一点。
在存储方面,您可以将 html 数据仅存储在文件系统中,也可以将其作为字符串写入数据库。像 SQLite 这样的本地数据库应该可以正常工作,但还有许多其他选项。
最后,我还建议您查看您计划抓取的网站上的条款,并检查 robots.txt 中的指导(如果包含在 html 中),因为某些网站会提供有关他们对网络爬虫感到高兴的频率的指导使用它们等。