【问题标题】:Data scraping using Xpath returns no value使用 Xpath 抓取数据不返回值
【发布时间】:2020-04-14 00:42:40
【问题描述】:

我想从以下网站上刮取一个项目的承诺金额,我使用相同的方法,但对于一个网站,代码没有返回值。

这段代码的输出是一个空数组:

import urllib
import requests
from lxml import html
url = 'https://www.kickstarter.com/projects/scratchideas/loki-the-ultra-portable-modular-and-robust-camera?ref=category'
page = requests.get(url=url)
tree = html.fromstring(page.content)
pledged = tree.xpath('//*[@id="react-project-header"]/div/div/div[3]/div/div[2]/div[1]/div[2]/span[1]/span/text()')
print("pledged: {}".format(pledged))

但是下面的代码返回了项目承诺的钱的真实价值:

url = 'https://www.kickstarter.com/projects/254683764/avoseedo-grow-your-own-avocodo-tree-with-ease'
page = requests.get(url=url)
tree = html.fromstring(page.content)
pledged = tree.xpath('//*[@id="content-wrap"]/div[2]/section[1]/div/div/div/div[1]/div/div[2]/div[2]/div[1]/h3/span/text()')
print("pledged: {}".format(pledged))

那么,我想知道有什么区别,为什么会这样?

【问题讨论】:

    标签: python-3.x xpath web-scraping


    【解决方案1】:

    AvoSeedo 项目已经完成。当你下载一个资助项目的网页时,似乎在文件的正文中写着承诺的金额。

    对于未资助的项目或正在进行中的收款,在正文中找不到金额。它依赖于 Javascript 进行动态渲染。

    要获得在 LOKI 项目中承诺的金额,需要 Selenium。或者我们可以使用一种解决方法。这个 XPath 应该获取为 LOKI 项目承诺的金额:

    normalize-space(substring-before(substring-after(//script[contains(.,"pledged_amount")],"pledged_amount":"),",&quot"))
    

    输出:15177

    编辑:15177 € 或 20073 $(取决于您的语言环境)

    【讨论】:

    • 是的。我位于欧洲。金额为 15177 欧元。如果您在具有美国语言环境的系统上尝试该表达式,您将获得 20073 $。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多