我需要使用Python爬取一个网站。我通过urlib模块获取源HTML代码,但我还需要抓取由JavaScript函数生成的一些HTML代码(该函数包含在HTML源代码中)。这个函数在网站中的作用是,当你按下一个按钮时,它会输出一些HTML代码。如何使用Python代码“按下”此按钮?Scrapy能帮助我吗?我使用Firebug捕获了POST请求,但当我试图将其传递到URL上时,我遇到了403错误。有什么建议吗?
我需要使用Python爬取一个网站。我通过urlib模块获取源HTML代码,但我还需要抓取由JavaScript函数生成的一些HTML代码(该函数包含在HTML源代码中)。这个函数在网站中的作用是,当你按下一个按钮时,它会输出一些HTML代码。如何使用Python代码“按下”此按钮?Scrapy能帮助我吗?我使用Firebug捕获了POST请求,但当我试图将其传递到URL上时,我遇到了403错误。有什么建议吗?
在Python中,我认为要使用Selenium 1.0。它是一个库,可以让你用自己喜欢的语言控制真实的网页浏览器。
你需要在脚本运行的机器上安装对应的网络浏览器,但这是最可靠的编程方式来访问使用大量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,有 Python 绑定到 Webkit。这里有一个完整的示例来执行 JavaScript 并提取最终的 HTML。