Python 2.7 在同一页上使用两个XPathSelector
我有一个蜘蛛,其中刮项目是3:品牌,型号和价格从同一页 品牌和型号使用相同的sel.xpath,后来通过.re在循环中提取和区分。但是,price item使用不同的xpath。如何在spider中使用或组合两个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
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现在返回一些附加元素,如逗号,并且价格与型号和品牌不匹配。我会问新问题,更新蜘蛛和链接到该网站。谢谢。