Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xpath中附加项的剥离_Python_Regex_Xpath_Scrapy - Fatal编程技术网

Python xpath中附加项的剥离

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):

我正试着把这些东西刮下来

项目包括:品牌、型号和价格。由于页面结构的复杂性,spider使用了2个xpath选择器

品牌和型号项目来自一个xpath,价格来自不同的xpath。我正在使用@har07建议的
(|)
操作符。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)