python javascript 自动抓取

python javascript scrape automatically

Python新手在此

我正试图从 Dutch Transparency Benchmark 网站上抓取许多不同公司的公司信息,但我不知道如何让它发挥作用。我试过了

pd.read_html(https://www.transparantiebenchmark.nl/en/scores-0#/survey/4/company/793)

requests.get("https://www.transparantiebenchmark.nl/en/scores-0#/survey/4/company/793")

然后从那里开始工作。但是,数据似乎是动态的 generated/queried,因此实际上并未包含在这些方法检索的 html 源代码中。

如果我转到浏览器的开发人员工具并复制 "final" html,如 "Elements" 选项卡中所示,所有信息都在那里。但是我想为几家公司重复这个过程,有什么方法可以自动化吗?

或者,如果无法直接从 html 获取信息,则可能还有第二种可能性。该站点允许将每个公司的信息下载为 Excel 文件。是否有可能以某种方式自动 "click" 下载按钮并将文件保存在某处?然后我也许可以遍历我需要的所有公司。

如果这个问题措辞不当,请原谅,在此先感谢您

图森塔克!

编辑:我也按照@pmkroeker 的建议使用BeautifulSoup 进行了尝试。但我真的不知道如何让它工作,以便它首先运行所有 javascript,以便该站点实际包含数据。

我认为您要么想要使用库来呈现页面。 答案似乎适用于 python。为了完整起见,我还将复制该答案中的代码。


您可以从命令行 pip install selenium,然后 运行 像这样:

from selenium import webdriver
from urllib2 import urlopen

url = 'http://www.google.com'
file_name = 'C:/Users/Desktop/test.txt'

conn = urlopen(url)
data = conn.read()
conn.close()

file = open(file_name,'wt')
file.write(data)
file.close()

browser = webdriver.Firefox()
browser.get('file:///'+file_name)
html = browser.page_source
browser.quit()

我认为您可以跳过文件写入并将其传递给那个 browser.get 调用,但我会留给您去发现。

您可以做的另一件事是在浏览器开发人员工具中查找 ajax 调用。即当使用 chrome 3 点 -> 更多工具 -> 开发人员工具或按 F12 之类的东西时。然后查看网络选项卡。会有各种各样的要求。您需要单击一个,然后单击 Preview 选项卡,然后浏览每个,直到找到看起来像 json 数据的响应。您实际上是在寻找他们用来获取数据以生成事物的 API 调用。找到一个后,单击 Headers 选项卡,您将看到一个 Request URL

即这个https://sa-tb.nl/api/widget/chart/survey/4/sector/38有很多数据

这里的问题是它可能会或可能不会重复(API 可能会改变,id 可能会改变)。 HTML 抓取可能会遇到类似的问题,因为 HTML 可以很容易地更改。