我有一只蜘蛛,其中刮下的物品是3:品牌,型号和价格来自同一页。
品牌和型号使用相同的sel.xpath,稍后通过.re in循环提取和区分。但是,价格项目使用不同的xpath。如何在蜘蛛中使用或组合两个XPathSelectors?
示例:
品牌和型号:
titles = sel.xpath('//table[@border="0"]//td[@class="compact"]')
价格:
prices = sel.xpath('//table[@border="0"]//td[@class="cl-price-cont"]//span[4]')
通过xpath单独测试和导出。我的问题是将这两个结合起来构建正确的循环。
有什么建议吗?
谢谢!
答案 0 :(得分:2)
如果您以后可以区分所有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]')
答案 1 :(得分:1)
我相信你在将价格与品牌/型号联系起来时遇到了麻烦,因为两条x路径都会给你一个所有数字的列表,对吗?相反,你想要做的是构建一个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.
通过这种方式,您知道在循环的每次迭代中,您获得的所有品牌/模型/价格都会合在一起。