我需要用python刮一个网站。我使用 urlib module获取源 html 代码,但我还需要抓取一些由 javascript 函数(包含在 html 源代码中)生成的 html 代码。这个功能在网站“中”的作用是,当您按下按钮时,它会输出一些 html 代码。如何使用 python 代码“按下”这个按钮?刮刮乐可以帮助我吗?我用 firebug 捕获了 POST 请求,但是当我尝试在 url 上传递它时,我收到 403 错误。有什么建议?
用python抓取javascript生成的html
IT技术
javascript
python
browser
screen-scraping
2021-01-27 06:30:19
5个回答
在 Python 中,我认为Selenium 1.0是要走的路。它是一个库,可让您使用您选择的语言控制真正的 Web 浏览器。
您需要在运行脚本的机器上安装有问题的 Web 浏览器,但它看起来是以编程方式询问使用大量 JavaScript 的网站的最可靠方法。
由于这里没有全面的答案,我会继续写一个。
要抓取 JS 渲染的页面,我们需要一个具有 JavaScript 引擎的浏览器(即支持 JavaScript 渲染)
像Mechanize、url2lib这样的选项将不起作用,因为它们不支持 JavaScript。
所以这就是你要做的:
设置PhantomJS以与Selenium一起运行。为它们安装依赖项后(请参阅此),您可以使用以下代码作为示例来获取完全呈现的网站。
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('http://jokes.cc.com/')
soupFromJokesCC = BeautifulSoup(driver.page_source) #page_source fetches page after rendering is complete
driver.save_screenshot('screen.png') # save a screenshot to disk
driver.quit()
我之前(在 .NET 中)必须这样做,并且您基本上必须托管浏览器,让它单击按钮,然后询问浏览器的 DOM(文档对象模型)以获取生成的 HTML .
这绝对是 Web 应用程序转向 Ajax/Javascript 方法来生成 HTML 客户端的缺点之一。
我使用 webkit,它是 Chrome 和 Safari 背后的浏览器渲染器。有通过 Qt 到 webkit 的 Python 绑定。这是执行 JavaScript 并提取最终 HTML的完整示例。