我有一个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
答案 0 :(得分:3)
我真的不明白为什么你使用像'//href=/text()'
这样的xpath,我建议先阅读一些xpath教程,here是一个非常好的。
如果您想获取所有图片网址,我认为这就是您想要的
pictures = response.xpath('//img/@src').extract()
现在picture.pop(0).strip()
只会获取最后一个网址strip
,请记住.extract()
会返回一个列表,因此pictures
现在包含所有图片链接,只需选择你需要的那些。