Scrapy 循环 - xpath 选择器转义它所应用的对象并返回所有记录?

Scrapy loop - xpath selector escaping object it is applied to and returning all records?

我将从尝试使用 scrapy 代码开始遍历车辆集合并提取模型和价格:

    def parse(self, response):
        hxs = Selector(response)
        split_url = response.url.split("/")
        listings = hxs.xpath("//div[contains(@class,'listing-item')]")
        for vehicle in listings:
            item = Vehicle()
            item['make'] = split_url[5]
            item['price'] = vehicle.xpath("//div[contains(@class,'price')]/text()").extract()
            item['description'] = vehicle.xpath("//div[contains(@class,'title-module')]/h2/a/text()").extract()
            yield item

我原本希望循环遍历列表和 return 仅为正在解析的单个车辆的价格,但它实际上是将页面上所有价格的数组添加到每个车辆项目。

我假设问题出在我的 xpath 选择器中 - "//div[contains(@class,'price')]/text()" 是否以某种方式允许解析器查看每次都应该解析的单一车辆之外的 div?

作为参考,如果我这样做 listings[1] 它 return 只有 1 个列表,因此循环应该有效。

编辑:我在上面添加了 print vehicle.extract() 行,并确认 vehicle 绝对只是一个单独的项目(并且每次循环迭代时它都会改变)。应用于 vehicle 的 xpath 选择器如何能够逃脱 vehicle 对象和 return 所有价格?

我在手册的帮助下解决了这个问题,here。综上所述,xpath确实是在逃避迭代,因为我忘记在//前面加上句号,这意味着它每次都在逃避到根节点。

我遇到了同样的问题。我已经查阅了您提到的文件。这里提供修改后的代码,希望对像我这样的初学者有所帮助。注意xpath中'.'的用法.//div[contains(@class,'title-module')]/h2/a/text()

def parse(self, response):
    hxs = Selector(response)
    split_url = response.url.split("/")
    listings = hxs.xpath("//div[contains(@class,'listing-item')]")
    for vehicle in listings:
        item = Vehicle()
        item['make'] = split_url[5]
        item['price'] = vehicle.xpath(".//div[contains(@class,'price')]/text()").extract()
        item['description'] = vehicle.xpath(".//div[contains(@class,'title-module')]/h2/a/text()").extract()
        yield item