【发布时间】:2020-02-22 17:36:31
【问题描述】:
我目前正在研究抓取,并且一直在关注 Youtube 上的教程。本教程使用“Scrapy”,我已经设法从教程中预览的网站上抓取数据。但是,现在我尝试抓取另一个网站但没有成功。
据我了解,问题出在我使用的 Xpath 上。我已经尝试了几个 Xpath 测试/生成器网站,但都没有成功。
这是以下 XML 代码:
<div class="price" currentmouseover="94">
<del currentmouseover="96">
<span class="woocommerce-Price-amount amount" currentmouseover="90"><span class="woocommerce-Price-currencySymbol">€</span>3.60</span>
</del>
<ins><span class="woocommerce-Price-amount amount" currentmouseover="123"><span class="woocommerce-Price-currencySymbol" currentmouseover="92">€</span>3.09</span></ins></div>
我目前正在使用以下代码:
def parse(self,response):
for title in response.xpath("//div[@class='Price']"):
yield {
'title_text': title.xpath(".//span[@class='woocommerce-Price-amount amount']/text()").extract_first()
}
我也尝试过使用 //span[@class='woocommerce-Price-amount amount']。
我希望我的输出为“3.09”,但是,当我将其导出到 JSON 文件时,我得到了 null。有人能指出我正确的方向吗?
提前致谢。
更新 1: 我已经设法用 Jack Fleeting 的回答解决了这个问题。由于我在理解 Xpath 时遇到问题,我一直在尝试不同的网站,以便进一步了解 Xpath 的工作原理。不幸的是,我被困在另一个例子中。
<div class="add-product"><strong><small>€3.11</small> €3.09</strong></div>
我正在使用以下 sn-p:
l.add_xpath('price', ".//div[@class='add-product']/strong[1]")
我的期望是输出 3.09,但是,我输出了两个数字。我试过使用最小函数,但 Xpath 1.0 不支持它。即:因为我想输出项目的实际(折扣)价值
【问题讨论】:
标签: python xpath web-scraping scrapy