gpt4 book ai didi

python - 抓取多个 URL 的 Scrapy 方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:16 24 4
gpt4 key购买 nike

我有一个项目需要完成大量数据抓取。

我一直在研究 Scrapy,到目前为止我对它印象深刻,但我正在寻找执行以下操作的最佳方法:

1) 我想抓取多个 URL 并为每个要抓取的 URL 传递相同的变量,例如,假设我想从 Bing、Google 和 Yahoo 返回关键字“python”的最高结果。

我想抓取 http://www.google.co.uk/q=python, http://www.yahoo.com?q=pythonhttp://www.bing.com/?q=python(不是实际的 URL,但您明白了)

我找不到使用关键字指定动态 URL 的方法,我能想到的唯一选择是在 PHP 或其他构建 URL 的文件中生成一个文件,并指定 scrapy 来抓取 URL 中的链接。

2) 显然每个搜索引擎都有自己的标记,所以我需要区分每个结果以找到相应的 XPath 以从中提取相关数据

3) 最后,我想将抓取的 Item 的结果写入数据库(可能是 redis),但只有当所有 3 个 URL 都完成抓取时,基本上我想从 3 个建立一个“配置文件”搜索引擎并将输出结果保存在一次交易中。

如果有人对这些问题有任何想法,我将不胜感激。

谢谢

最佳答案

1) 在BaseSpider中,有一个__init__方法可以在子类中被重写。这是设置 start_urls 和 allowed_domains 变量声明的地方。如果您在运行爬虫之前心里有一个 url 列表,那么您可以在此处动态插入它们。

例如,在我构建的一些蜘蛛中,我从 MongoDB 中提取预格式化的 URL 组,并一次性将它们插入到 start_urls 列表中。

2)这可能有点棘手,但您可以通过查看响应对象 (response.url) 轻松查看已抓取的 URL。您应该能够检查 url 是否包含“google”、“bing”或“yahoo”,然后为该类型的 url 使用预先指定的选择器。

3) 我不太确定#3 是否可行,或者至少不是没有困难。据我所知,start_urls 列表中的 url 并不是按顺序抓取的,它们各自独立地到达管道。我不确定如果没有一些严肃的核心黑客攻击,您是否能够收集一组响应对象并将它们一起传递到管道中。

但是,您可能会考虑暂时将数据序列化到磁盘,然后将数据批量保存到您的数据库中。我构建的其中一个爬虫接收了大约 10000 个 URL 组。我没有进行 10000 次单项数据库插入,而是将 URL(和收集的数据)存储在 BSON 中,然后再将其插入 MongoDB。

关于python - 抓取多个 URL 的 Scrapy 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com