Scrapy嵌套页面爬行

iel*_*poc 3 python scrapy

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

我只将项目作为第一个已爬网页面项目的编号.

网站结构将是这样的.

  1. 抓取品牌 - 品牌链接
  2. 使用品牌链接去抓取模型和模型链接
  3. 使用模型链接可以抓取特定的公告及其属性.

让我们说品牌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
Run Code Online (Sandbox Code Playgroud)

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

Guy*_*ely 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
Run Code Online (Sandbox Code Playgroud)