把从一个蜘蛛抓取的网址传给另一个蜘蛛

2024-04-16 10:37:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何将从一个spider抓取的URL发送到另一个spider的start_urls?在

具体来说,我想运行一个spider,它从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
        }

Tags: fromurl列表response页面xmlurlsstart
3条回答

将URL作为字符串写入文件。从另一个spider中的同一个文件中读取它们。在

从第一个spider可以将url保存在某个数据库中,或者通过管道发送到某个队列(Zerro、Rabbit MQ、Redis)。在

第二个spider可以使用方法-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)

或者url可以通过cli或{a3}从队列代理传递给spider。或者spider可以从broker启动,然后启动spider通过start_请求获取他的url。在

真的有很多方法可以做到。这种方式取决于为什么需要将url从一个spider传递到另一个spider。在

您可以查看以下项目:Scrapy Cluster,Scrapy Redis。也许这就是你要找的。在

你为什么要用不同的蜘蛛来满足这种需求?在

您可以只拥有一个spider,而不是将URL传递给另一个spider,只需在parse方法中yield另一个Request。在

from scrapy.spiders import SitemapSpider

class Daily(SitemapSpider):
    name = 'daily'
    sitemap_urls = ['http://example.com/sitemap.xml']

    def parse(self, response):

        yield Request(url="URL here", callback=callback_function)

相关问题 更多 >