python - 将抓取 URL 从一个蜘蛛传递到另一个蜘蛛

标签 python xml web-scraping scrapy

如何将一台蜘蛛抓取的 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/

相关文章:

python - 如何在 DRF 中序列化通用外键

c# - Linq 性能解析 XML 文件

vba - 在 HTMLElement 上使用 getElementById 而不是 HTMLDocument

javascript - JS 在弹出窗口上执行操作

Python 字典数组 - 每个值一行

python - Django : Define DateTimeField default value as None or blank field

python - 如何将字符串转换为参数名称并将其传递给函数?

c# - XDocument.Save() 无法访问文件

python - ListView 中的 Django 表单,表单 POST 时出错

java - 将 xml 插入 pdf