Scrapy嵌套页面爬行

时间:2014-01-27 09:11:47

标签: python scrapy

我正在努力进行嵌套页面抓取。

我只将项目作为第一个已抓取页面项目计数的数字。

网站结构将是这样的。

  1. 抓取品牌 - 品牌链接
  2. 使用品牌链接去抓取模型和模型链接
  3. 使用模型链接转到并抓取特定公告及其属性。
  4. 假设品牌A有2个型号,第一个型号有11个公告,第二个型号有9个。品牌B有3个型号,每个型号有5个公告。

    在上面的示例中,我需要将每个公告作为单独的项目(共35个),但不是我得到的项目编号为品牌A的品牌,第一个公告,然后是品牌B的第一个公告。

    class SiteSpider(CrawlSpider):
    log.start(logfile="log.txt", loglevel="DEBUG", logstdout=None)
    name = "site"
    #download_delay = 2
    allowed_domains = ['site.com']
    start_urls = ['http://www.site.com/search.php?c=1111']
    items = {}
    
    
    def parse(self, response):
        sel = Selector(response)
        #requests =[]
        brands = sel.xpath("//li[@class='class_11']")
        for brand in brands:
            item = SiteItem()
            url = brand.xpath('a/@href')[0].extract()
            item['marka'] = brand.xpath("a/text()")[0].extract()
            item['marka_link'] =  brand.xpath('a/@href')[0].extract()
            request = Request("http://www.site.com"+url,callback=self.parse_model, meta={'item':item})
            # requests.append(request)
            #
            yield request
    
    def parse_model(self, response):
        sel = Selector(response)
        models = sel.xpath("//li[@class='class_12']")
        for model in models:
    
            item = SiteUtem(response.meta["item"])
            url2 = model.xpath('a/@href')[0].extract()
            item ['model'] = model.xpath("a/text()")[0].extract()
            item ['model_link'] = url2
    
        return item
    

    你可以用伪代码帮助这个noobie实现这个吗?我猜在基础水平上犯了一个错误。

1 个答案:

答案 0 :(得分:5)

在您的parse_model中,您有一个创建项目但不会产生项目的循环,请尝试将其更改为:

def parse_model(self, response):
    sel = Selector(response)
    models = sel.xpath("//li[@class='class_12']")
    for model in models:

        item = SiteUtem(response.meta["item"])
        url2 = model.xpath('a/@href')[0].extract()
        item ['model'] = model.xpath("a/text()")[0].extract()
        item ['model_link'] = url2

        yield item