Python xpath中附加项的剥离
我正试着把这些东西刮下来 项目包括:品牌、型号和价格。由于页面结构的复杂性,spider使用了2个xpath选择器 品牌和型号项目来自一个xpath,价格来自不同的xpath。我正在使用@har07建议的Python xpath中附加项的剥离,python,regex,xpath,scrapy,Python,Regex,Xpath,Scrapy,我正试着把这些东西刮下来 项目包括:品牌、型号和价格。由于页面结构的复杂性,spider使用了2个xpath选择器 品牌和型号项目来自一个xpath,价格来自不同的xpath。我正在使用@har07建议的(|)操作符。XPath分别针对每个项目进行了测试,它们正在工作并正确提取所需的项目。但是,在加入2个XPath之后,price item开始解析其他项目,如逗号和price在输出到csv时与品牌/型号项目不匹配 这是爬行器的解析片段的外观: def parse(self, response):
(|)
操作符。XPath分别针对每个项目进行了测试,它们正在工作并正确提取所需的项目。但是,在加入2个XPath之后,price item开始解析其他项目,如逗号和price在输出到csv时与品牌/型号项目不匹配
这是爬行器的解析片段的外观:
def parse(self, response):
sel = Selector(response)
titles = sel.xpath('//table[@border="0"]//td[@class="compact"] | //table[@border="0"]//td[@class="cl-price-cont"]//span[4]')
items = []
for t in titles:
item = AltaItem()
item["brand"] = t.xpath('div[@class="cl-prod-name"]/a/text()').re('^([\w\-]+)')
item["model"] = t.xpath('div[@class="cl-prod-name"]/a/text()').re('\s+(.*)$')
item["price"] = t.xpath('text()').extract()
items.append(item)
return(items)
这就是csv在抓取后的工作:
有什么建议可以解决这个问题吗
谢谢。基本上,问题是由您的
标题引起的。xpath的深度太深,以至于您需要使用连接两个xpath,以便能够刮取品牌/模型字段和价格字段
将titles
xpath修改为单个xpath包含品牌/型号和价格的重复元素(随后更改品牌、型号和价格xpath),这意味着您不再会在品牌和型号位于一个项目中,而价格位于下一个项目中时出现不匹配
def parse(self, response):
sel = Selector(response)
titles = sel.xpath('//table[@class="table products cl"]//tr[@valign="middle"]')
items = []
for t in titles:
item = AltaItem()
item["brand"] = t.xpath('td[@class="compact"]/div[@class="cl-prod-name"]/a/text()').re('^([\w\-]+)')
item["model"] = t.xpath('td[@class="compact"]/div[@class="cl-prod-name"]/a/text()').re('\s+(.*)$')
item["price"] = t.xpath('td[@class="cl-price-cont"]//span[4]/text()').extract()
items.append(item)
return(items)