我正在尝试下载this page,以便我可以搜索搜索结果。但是,当我下载页面并尝试使用BeautifulSoup进行处理时,我发现页面的某些部分(例如搜索结果)未包含在内,因为网站检测到未启用javascript。
有没有办法在Python中启用javascript下载URL的HTML?
答案 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