【问题标题】:Scrapy: Store/scrape current start_url?Scrapy:存储/抓取当前的 start_url?
【发布时间】:2014-02-27 18:43:59
【问题描述】:

背景(可跳过):

我目前正在运行两个不同的 scrapy 爬虫。

第一个检索关于产品 x 的信息,第二个检索在第一个机器人抓取的 url 上找到的关于产品 x 的其他信息。

我的管道将每个产品的信息连接到多个文本文件中,其中每个产品的信息占用一行数据,并被分解为多个类别作为不同的文本文件。

每个机器人显然都保持信息完整性,因为所有信息一次解析一个链接(因此每个文本文件的信息与其他文本文件逐行对齐)。但是,我了解scrapy 使用动态爬取机制,根据加载时间而不是 start_url 列表中的顺序来爬取网站。因此,我的第二个爬虫的信息与来自第一个爬虫的其他文本文件不一致。

一个简单的解决方法是抓取两个机器人都找到的信息的“主键”(mysql fanboys)变体,因此可以通过按字母顺序对主键进行排序来帮助对齐表中的产品信息,因此手动对齐数据。

然而,我目前的项目在寻找主键方面让我陷入了困境。第二个爬虫抓取具有有限唯一信息的网站,因此我将其发现链接回第一个爬虫的唯一方法是使用第一个爬虫识别的 url 并将其链接到第二个爬虫中的相同 start_url。


问题:

有没有办法将在 xhtmlselector 的每次迭代中被爬取的 start_url 分配给一个变量,然后可以将在该特定 url 上爬取的项目/字段数据推送到管道中(在无法找到它的情况下)源代码)?

这是我的代码:

    from scrapy.spider import BaseSpider
    from scrapy.selector import HtmlXPathSelector
    from Fleche_Noire.items import FlecheNoireItem
    import codecs

    class siteSpider(BaseSpider):
        name = "bbs"
        allowed_domains = ["http://www.samplewebsite.abc"]
        start_urls = [    
            'http://www.samplewebsite.abc/prod1',
            'http://www.samplewebsite.abc/prod2',
       ]



        def parse(self, response):
            hxs = HtmlXPathSelector(response)
            items = []
            item = FlecheNoireItem()
            item["brand"] = []
            item["age"] = []
            item["prodcode"] = hxs.select('//h1/text()').extract() or [' '] 
            item["description1"] = []
            item["description2"] = []
            item["product"] = []
            item["availability"] = []
            item["price"] = []
            item["URL"] = []
            item["imgurl"] = []
            items.append(item)
            return items

我希望能够将 start_url 存储为一个项目,就像在页面上找到的 h1 文本一样。

谢谢!

【问题讨论】:

    标签: python url scrapy variable-assignment scrape


    【解决方案1】:

    您可以从response.url 获得它,或者在重定向的情况下甚至从response.request.url 获得它,意思是:

    item["start_url"] = response.request.url
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      相关资源
      最近更新 更多