Python 2.7 在同一页上使用两个XPathSelector

Python 2.7 在同一页上使用两个XPathSelector,python-2.7,xpath,scrapy,Python 2.7,Xpath,Scrapy,我有一个蜘蛛,其中刮项目是3:品牌,型号和价格从同一页 品牌和型号使用相同的sel.xpath,后来通过.re在循环中提取和区分。但是,price item使用不同的xpath。如何在spider中使用或组合两个XPathSelector 示例: 对于品牌和型号: titles = sel.xpath('//table[@border="0"]//td[@class="compact"]') 价格: prices = sel.xpath('//table[@border="0"]//td[@c

我有一个蜘蛛,其中刮项目是3:品牌,型号和价格从同一页

品牌和型号使用相同的sel.xpath,后来通过.re在循环中提取和区分。但是,price item使用不同的xpath。如何在spider中使用或组合两个XPathSelector

示例:

对于品牌和型号:

titles = sel.xpath('//table[@border="0"]//td[@class="compact"]')
价格:

prices = sel.xpath('//table[@border="0"]//td[@class="cl-price-cont"]//span[4]')
通过xpath单独测试和导出。我的问题是如何结合这两个元素来构造适当的循环

有什么建议吗


谢谢

如果以后可以区分所有3种项目(品牌、型号、价格),可以尝试使用XPath union(
|
)将两个XPath查询捆绑到一个选择器中:

//table[@border="0"]//td[@class="compact"] 
    | 
//table[@border="0"]//td[@class="cl-price-cont"]//span[4]
更新:

回应您的评论,上面的意思是单个XPath字符串。我没有使用python,但我认为应该是这样的:

sel.xpath('//table[@border="0"]//td[@class="compact"] | //table[@border="0"]//td[@class="cl-price-cont"]//span[4]')

我相信您在将价格与品牌/型号关联起来时遇到了问题,因为两个XPath都会为您提供所有数字的列表,对吗?相反,您要做的是构建一个xpath,它将获取表中的每一行。然后,在循环中,您可以进一步执行xpath查询,以提取make/model/price

rows = sel.xpath('//table[@border="0"]/tr')  # Get all the rows
for row in rows:
    make_model = row.xpath('//td[@class="compact"]/text()').extract()
    # set make and model here using your regex. something like:
    (make,model) = re("^(.+?)\s(.+?)$", make_model).groups()

    price = row.xpath('//td[@class="cl-price-cont"]//span[4]/text()').extract()

    # do something with the make/model/price.

这样,您就知道,在循环的每个迭代中,您得到的品牌/型号/价格都是一致的。

谢谢您的提示。作为一个初学者,我以前从未见过这种情况。请告诉我这是一个由
(|)分隔的两个字符串还是一个字符串?谢谢。刚试过你的方法。Price xpath现在返回一些附加元素,如逗号,并且价格与型号和品牌不匹配。我会问新问题,更新蜘蛛和链接到该网站。谢谢。