【问题标题】:Scraping with Python - XPath issue使用 Python 抓取 - XPath 问题
【发布时间】: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


    【解决方案1】:

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

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

    注意price 是小写的,就像在你的 html 中一样。

    【讨论】:

    • 我已将第一个 xpath 更改为 "//div[@class='product-wrap']",并根据您的建议更新了第二部分。它工作得很好。同时,我也添加了产品名称。我目前正在尝试在同一行中生成产品名称和价格。如果我明天不能管理,我会更新我的帖子。非常感谢杰克。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2019-02-13
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多