如何将一台蜘蛛抓取的 URL 发送到另一台蜘蛛的 start_urls
?
具体来说,我想运行一个蜘蛛程序,它从 XML 页面获取 URL 列表。检索到 URL 后,我希望其他蜘蛛使用它们进行抓取。
from scrapy.spiders import SitemapSpider
class Daily(SitemapSpider):
name = 'daily'
sitemap_urls = ['http://example.com/sitemap.xml']
def parse(self, response):
print response.url
# How do I send these URL's to another spider instead?
yield {
'url': response.url
}
最佳答案
从第一个蜘蛛中,您可以将 url 保存在某个数据库中或发送到某个队列(Zerro、Rabbit MQ、Redis),例如通过管道。
第二个蜘蛛可以使用方法 - start_requests 获取 url
class MySpider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
urls = my_db.orm.get('urls');
for url in urls:
yield scrapy.Request(url)
或者可以通过 cli 从队列代理将 URL 传递给蜘蛛或API 。或者蜘蛛可以从代理启动,启动蜘蛛通过 start_requests 获取他的 url。
确实存在多种方法可以做到这一点。方式取决于您需要将 URL 从一个蜘蛛传递到另一个蜘蛛的标准。
您可以查看以下项目:Scrapy-Cluster、Scrapy-Redis。可能就是您正在寻找的东西。
关于python - 将抓取 URL 从一个蜘蛛传递到另一个蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401824/