使用Python抓取-XPath问题

时间:2020-02-22 17:36:31

标签: python xpath web-scraping scrapy

我目前正在研究抓取方式,并且一直在关注有关YouTube的教程。本教程使用的是“抓取”功能,我设法从本教程中预览的网站上抓取了数据。但是,现在我尝试抓取另一个网站没有成功。

据我了解,问题出在我使用的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: 我已经用杰克·弗莱汀的答案解决了这个问题。由于我在理解Xpath时遇到问题,因此我一直在尝试其他网站,以便进一步了解Xpath的工作方式。不幸的是,我陷入了另一个例子。

<div class="add-product"><strong><small>€3.11</small> €3.09</strong></div>

我正在使用以下代码段:

 l.add_xpath('price', ".//div[@class='add-product']/strong[1]")

我的期望是输出3.09,但是,我要输出两个数字。我尝试使用最小功能,但是Xpath 1.0不支持它。即:由于我想输出商品的实际(折扣)价值

1 个答案:

答案 0 :(得分:1)

尝试这个xpath表达式,看看它是否有效:

//div[@class='price']/ins/span

请注意,price是小写字母,就像在您的html中一样。