【问题标题】:Scrapy:Pass data between 2 spidersScrapy:在 2 个蜘蛛之间传递数据
【发布时间】:2012-07-19 11:15:07
【问题描述】:

我需要创建一个从网站抓取一些数据的蜘蛛。 部分数据是外部 URL。

我已经创建了从根站点抓取数据的蜘蛛,现在我想为外部网页编写蜘蛛。

我正在考虑创建一个使用 SgmlLinkExtractor 跟踪每个外部网页中的某些特定链接的爬虫。

将 start_url 列表传递给第二个蜘蛛的推荐方式是什么?

我的想法是为项目生成一个 json 文件并读取第二个蜘蛛的 start_requests 中的属性。

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    我已经创建了从根站点抓取数据的蜘蛛 现在我想为外部网页编写蜘蛛。

    将这些外部页面 url 保存到数据库。

    将 start_url 列表传递给第二个蜘蛛的推荐方式是什么?

    在您的其他蜘蛛中覆盖 BaseSpider.start_requests 并从您从数据库获得的 url 创建请求。

    【讨论】:

    • 谢谢,这正是我所做的。我将网址保存到一个文件中,第二个蜘蛛在 start_requests 中读取并解析它。
    【解决方案2】:

    这个问题很模糊,但这是一种方法(??)

    class PracticeSpider(BaseSpider):
        name = "project_name"
        allowed_domains = ["my_domain.org"]
    
        def start_requests(self):
            start_urls = "The First Page URL"
            return [Request(start_urls, callback=self.parse)]
    
        def parse(self, response):
            # parse the first page
            yield self.pageParser(response)
    
            # grab the external URLs you want to follow
            ext_urls = ...
    
            for url in ext_urls:
                yield Request(url, callback=self.pageParser)
    
        def pageParser(self, response):
            # parse the page
            return items
    

    Request 中还有一个 meta={} 属性可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      相关资源
      最近更新 更多