【问题标题】:Soup doesn't download everything in the HTML PythonSoup 不会下载 HTML Python 中的所有内容
【发布时间】:2020-04-11 04:06:46
【问题描述】:

我正在使用 BeautifulSoup (bs4) 从 SSRN 论文 URL 中提取数据,这里是 URL 供参考 https://papers.ssrn.com/sol3/papers.cfm?abstract_id=962461。我想要的数据位于页面右侧的 PlumX 指标小部件上。如果您将鼠标悬停在它上面并查看“Citations:95”,我想提取 95。这在 HTML 中为:

`<li class="plx-citation">
       <span class="ppp-label">Citation Indexes: </span>
       <span class="ppp-count">95</span>
</li>`

我在 Python 中尝试了许多方法,但似乎都没有奏效:

1) 按类别提取信息

soup.find("li", {"class": "ppp-count"})

输出为None

2) 通过 xpath 提取信息,使用lxml 代替 Soup:

`tree = html.fromstring(paper_url.content)
 r = tree.xpath('//*[@id="maincontent"]/div[2]/div[2]/div/div[2]/div/div[2]/div/div/div/ul/li[1]/ul/li/span[2]')`

输出为[]

3) 我打印了整个汤和 lxml,plumX 数据就消失了(这些 HTML 分支不存在,实际上引用也没有任何 HTML)。

它在主页中(如果您在浏览器中使用检查元素检查它,但在代码中从不存在)。我什至尝试使用不同的解析器,例如html5lib,但它并没有解决我的问题。有人可以告诉我该怎么做吗?

【问题讨论】:

标签: python html beautifulsoup


【解决方案1】:

实际上,您无法提取所需值的主要原因是,widget 是通过 JavaScript 加载的,它从 API 获取数据。

import requests
import json


params = {
    'type': 'ssrn_id',
    'id': '962461',
    'site': 'ssrn',
    'href': 'https://plu.mx/ssrn/a/?ssrn_id=962461',
    'ref': '',
    'pageToken': 'f0399e1a-c031-0c64-6619-423f-7ebf45fa0416',
    'isElsWidget': 'false'
}


def main(url):
    r = requests.get(url, params=params).json()
    print(r['statistics']['Citations'][0]['count'])
    # print(json.dumps(r, indent=4)) for nice view :)


main("https://api.plu.mx/widget/other/artifact")

输出:

95

【讨论】:

  • 您对实时检索此信息有什么建议吗?我正在尝试通过大量论文来做到这一点,这样我就可以获得idhref,但我不确定pageToken
  • @Afr0 chek my previous answer 将为您解释如何获取XHR 请求。
  • 嗨,我通读了,如果我理解正确,我可以使用requests_html 库来做吗?我不想使用 selenium,因为它会破坏我的计算时间(大约 10k 论文)。我也不确定你是如何从网站上得到它的。我点击了Inspect Element &gt; Network &gt; XHR,没有看到pageToken
  • @Afr0 如果您能够找到XHR 请求。所以你必须按下parameters tab 所以在这种情况下你甚至不需要使用requests_html
  • @Afr0 我只能为当前提出的问题提供答案。因为这将违反社区规则,该规则旨在限制您针对特定问题提出的问题。因此您根本不需要使用pageToken 参数。因为它是一个自动动态生成的令牌,由 Java 函数用于您的问题不感兴趣的其他事情。
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
相关资源
最近更新 更多