【问题标题】:How to extract webpage data which is generated by script using python requests如何使用python请求提取脚本生成的网页数据
【发布时间】:2018-12-17 13:12:31
【问题描述】:

我有这个返回 PI 值的 html 代码

<!DOCTYPE html>
<html>
<body>

<p>This example calls a function which returns the value of PI:</p>

<p id="demo"></p>

<script>
function myFunction() {
    return Math.PI;
}

document.getElementById("demo").innerHTML = myFunction();
</script>

</body>
</html>

当我使用 python 请求库时,我只得到与上面完全相同的源代码,但没有得到 Math.PI 的值。

我只想提取 PI 的值,我该如何使用 python 呢?

【问题讨论】:

  • 这篇文章有关于使用python执行js的信息:Executing Javascript from Python
  • 你用什么来解析 HTML ?
  • 我正在使用 Beautifulsoup,但我不确定如何在 javascript 中获取动态处理函数的数据。
  • 请提供您使用requestsBeautifulSoup的代码行

标签: javascript python python-requests


【解决方案1】:

您可以使用 Piotr Dabkowski 的 js2py 库。

只需使用解析器或正则表达式来获取您想要的功能,然后:

#pip install js2py

import js2py

js = """
function myFunction() {
    return Math.PI;
}
"""

myFunction = js2py.eval_js(js)

myFunction()

#Returns
3.141592653589793

【讨论】:

  • 谢谢你,但如果是这样的话,我该如何让它工作。 PI 的值是从服务器而不是静态函数不断更新的。在我的例子中,示例 html 代码在服务器中,我使用 python 请求来提取从服务器更新的值(PI)。
  • 大声笑,你没有在你的问题中问这个问题。只需先验证此问题,然后修改您的问题或为您的问题创建另一个问题。
  • 但是解决您的问题的唯一方法是使用 cronjob 或使用循环不断运行您的脚本。这取决于你的问题。更何况 Javascript 中的 Math.PI 函数是一个常数,所以 PI 的值不会改变。如果不是或非常接近的东西,请您提供真实代码的示例,否则我们将无法为您提供进一步的帮助
【解决方案2】:

在浏览器中运行后,您需要查看 html 代码。
在这种情况下,使用无头浏览器就可以了。有很多可供选择,比如 activesoup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2021-04-05
    • 2018-08-02
    相关资源
    最近更新 更多