Python Scrapy-多页上的项目处理
我需要刮的品牌,型号和版本的车辆在多个页面,并把它放在一个单一的项目。我希望我的爬行器从第1页检索车辆品牌列表。然后,对于每个品牌,转到第2页,获取所有型号。对于每个型号,请转至第3页,获取所有相关版本和规格。 每个版本的品牌和型号都需要放在一个单独的汽车项目中(和?)。 不幸的是,它只是在第1页上循环第一个品牌的所有步骤。在获得下一个品牌并重新开始这一过程之前,我如何强制它在所有型号和相关版本上循环?我见过这个问题以不同的形式提出,但当我试图控制一个项目的处理顺序时,我仍然很难理解多个回调是如何工作的Python Scrapy-多页上的项目处理,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我需要刮的品牌,型号和版本的车辆在多个页面,并把它放在一个单一的项目。我希望我的爬行器从第1页检索车辆品牌列表。然后,对于每个品牌,转到第2页,获取所有型号。对于每个型号,请转至第3页,获取所有相关版本和规格。 每个版本的品牌和型号都需要放在一个单独的汽车项目中(和?)。 不幸的是,它只是在第1页上循环第一个品牌的所有步骤。在获得下一个品牌并重新开始这一过程之前,我如何强制它在所有型号和相关版本上循环?我见过这个问题以不同的形式提出,但当我试图控制一个项目的处理顺序时,我仍然很难理解多个回调是如
class Spider(scrapy.Spider):
name = "fdm_bot"
allowed_domains = ["fdm.dk"]
start_urls = ["http://www.fdm.dk/bildatabasen",]
def parse(self, response):
rows = response.xpath('//td//a[contains(@href,"bildatabasen")]')
for row in rows:
car = CarItem()
car['brand'] = row.xpath('./text()').extract()
absolute_URL = response.urljoin(row.xpath('./@href').extract()[0])
request = Request(absolute_URL, callback=self.parse_model, meta={'car':car})
yield request
def parse_model(self, response):
rows = response.xpath('//td//a[contains(@href,"bildatabasen")]')
for row in rows:
car = response.meta['car']
brand = car['brand'][0]
model = row.xpath('./text()').extract()[0]
car['model'] = string.replace(model,brand, "")
absolute_URL = response.urljoin(row.xpath('./@href').extract()[0])
request = Request(absolute_URL, callback=self.parse_editions, meta={'car':car})
return request
def parse_editions(self, response):
rows = response.xpath('//td//a[contains(@href,"bildatabasen")]')
for row in rows:
car = response.meta['car']
brand = car['brand'][0]
model = car['model']
edition = row.xpath('./text()').extract()[0]
edition = string.replace(edition,brand, "")
car['edition'] = string.replace(edition,model, "")
absolute_URL = response.urljoin(row.xpath('./@href').extract()[0])
request = Request(absolute_URL, callback=self.parse_specs, meta={'car':car})
return request
def parse_specs(self, response):
car = response.meta['car']
car['engineVolume'] = 1.0
return car