使用Python下载URL的html - 但启用了javascript

时间:2011-07-08 20:36:28

标签: python screen-scraping

我正在尝试下载this page,以便我可以搜索搜索结果。但是,当我下载页面并尝试使用BeautifulSoup进行处理时,我发现页面的某些部分(例如搜索结果)未包含在内,因为网站检测到未启用javascript。

有没有办法在Python中启用javascript下载URL的HTML?

4 个答案:

答案 0 :(得分:2)

我会考虑在PyQt4库中使用QtWebKit模块。该模块将让JS代码在页面上运行,一旦完成,您可以使用我认为的标准方法保存HTML。

否则,Selenium是要走的路。它允许您从Python脚本控制Web浏览器以提取页面,然后提取所有DOM内容。

答案 1 :(得分:2)

@kstruct:我不喜欢用QtWebKit和PyQt4编写完整的浏览器,而是使用已编写的浏览器。有PhantomJS(C ++)项目,或PyPhantomJS(Python)。基本上Python就是QtWebKit和Python。

它们都是无头浏览器,您可以直接从JavaScript控制它们。 Python版本有一个插件系统,允许您扩展核心,以便在需要时提供其他功能。

以下是PyPhantomJS的示例脚本(带saveToFile plugin

// create new webpage
var page = new WebPage();

// open page, set callback
page.open('url', function(status) {
    // exit if page couldn't load
    if (status !== 'success') {
        console.log('FAIL to load!');
        phantom.exit(1);
    }

    // save page content to file
    phantom.saveToFile(page.content, 'myfile.txt');
    phantom.exit();
});

有用的链接:
API reference | How to write plugins

答案 2 :(得分:0)

一旦你想要启用javascript,你要求的是非常接近浏览器。您可以使用jython然后使用HtmlUnit,这是一个基于java的无头浏览器。它非常快但不是很稳定(因为它模仿了浏览器并且不是真正的浏览器)。我认为最快和最简单的方法是使用硒(ide或最好是rc)。 Selenium让您能够控制自己喜欢的浏览器(FF,IE,Chrome,..)。虽然它是用于测试目的,但它可能对你有用。它稳定且非常快(我认为它甚至比HtmlUnit更快)。

答案 3 :(得分:0)

您可以在http://htql.net使用htql。

import htql;
browser=htql.Browser(2);
page, url=browser.goUrl('http://docs.python.org/search.html?q=chdir&check_keywords=yes&area=default');
import time; 
time.sleep(2);
page, url=browser.getUpdatedPage();

顺便说一下,您需要在http://irobotsoft.com/

安装IRobot