Scrapy蜘蛛Xpath图像网址

时间:2016-05-20 16:52:56

标签: python csv xpath scrapy scrapy-spider

我有一个scrapy蜘蛛,它接收所需关键字的输入,然后产生一个搜索结果网址。然后,它会抓取该网址,以便在'项目中搜索有关每个汽车结果的所需值。我试图在我的产品中添加每个全尺寸汽车图像链接的网址,该链接随车辆列表中的每辆车一起提供。

我输入关键字时正在抓取的特定网址是" honda"如下: Honda search results example

我一直在弄清楚找出写xpath的正确方法,然后将我获得的任何图像列表列入蜘蛛的项目'我在代码的最后部分屈服了。 现在当Items被保存到.csv文件时,下面的lkq.py蜘蛛正在运行命令" scrapy crawl lkq -o items.csv -t csv"图片的items.csv文件的列只是全零而不是图像网址。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import scrapy
from scrapy.shell import inspect_response
from scrapy.utils.response import open_in_browser

keyword = raw_input('Keyword: ')
url =     'http://www.lkqpickyourpart.com/DesktopModules/pyp_vehicleInventory/getVehicleInventory.aspx?store=224&page=0&filter=%s&sp=&cl=&carbuyYardCode=1224&pageSize=1000&language=en-US' % (keyword,)
class Cars(scrapy.Item):
Make = scrapy.Field()
Model = scrapy.Field()
Year = scrapy.Field()
Entered_Yard = scrapy.Field()
Section = scrapy.Field()
Color = scrapy.Field()
Picture = scrapy.Field()


class LkqSpider(scrapy.Spider):
name = "lkq"
allowed_domains = ["lkqpickyourpart.com"]
start_urls = (
    url,
)

def parse(self, response):
    picture = response.xpath(
        '//href=/text()').extract()
    section_color = response.xpath(
        '//div[@class="pypvi_notes"]/p/text()').extract()
    info = response.xpath('//td["pypvi_make"]/text()').extract()
    for element in range(0, len(info), 4):
        item = Cars()
        item["Make"] = info[element]
        item["Model"] = info[element + 1]
        item["Year"] = info[element + 2]
        item["Entered_Yard"] = info[element + 3]
        item["Section"] = section_color.pop(
            0).replace("Section:", "").strip()
        item["Color"] = section_color.pop(0).replace("Color:",   "").strip()
        item["Picture"] = picture.pop(0).strip()
        yield item

1 个答案:

答案 0 :(得分:3)

我真的不明白为什么你使用像'//href=/text()'这样的xpath,我建议先阅读一些xpath教程,here是一个非常好的。

如果您想获取所有图片网址,我认为这就是您想要的

pictures = response.xpath('//img/@src').extract()

现在picture.pop(0).strip()只会获取最后一个网址strip,请记住.extract()会返回一个列表,因此pictures现在包含所有图片链接,只需选择你需要的那些。