如何解析包含JavaScript代码的HTML

6
如何解析大量使用JavaScript的HTML文档?我知道Python中有一些库可以解析静态XML / HTML文件,但我基本上正在寻找一个程序或库(甚至是Firefox插件),它可以读取HTML + JavaScript,执行JavaScript部分,并输出没有JavaScript的HTML代码,以便在浏览器中显示时看起来完全相同。
举个简单的例子:
<a href="javascript:web_link(34, true);">link</a>

应该用JavaScript函数返回的适当值来替换,例如:
<a href="http://www.example.com">link</a>

一个更复杂的例子是保存的Facebook HTML页面,其中充斥着大量的JavaScript代码。
可能与如何使用Node.js“执行”HTML + JavaScript页面有关,但我真的需要Node.js和JSDOM吗?另外还有用于渲染HTML和JavaScript的Python库,但我不仅对纯HTML输出感兴趣。

要么获取JavaScript运行时并解决其中的问题,要么分析代码并确定它最终会成为什么(强烈依赖于网站配置)。 - Chris Morgan
http://stackoverflow.com/questions/19465510/how-to-parse-a-webpage-that-includes-javascript?rq=1 - gliptak
3个回答

3
你可以使用Python详细介绍 Selenium ,请参阅此处
示例:
import xmlrpclib

# Make an object to represent the XML-RPC server.
server_url = "http://localhost:8080/selenium-driver/RPC2"
app = xmlrpclib.ServerProxy(server_url)

# Bump timeout a little higher than the default 5 seconds
app.setTimeout(15)

import os
os.system('start run_firefox.bat')

print app.open('http://localhost:8080/AUT/000000A/http/www.amazon.com/')
print app.verifyTitle('Amazon.com: Welcome')
print app.verifySelected('url', 'All Products')
print app.select('url', 'Books')
print app.verifySelected('url', 'Books')
print app.verifyValue('field-keywords', '')
print app.type('field-keywords', 'Python Cookbook')
print app.clickAndWait('Go')
print app.verifyTitle('Amazon.com: Books Search Results: Python Cookbook')
print app.verifyTextPresent('Python Cookbook', '')
print app.verifyTextPresent('Alex Martellibot, David Ascher', '')
print app.testComplete()

2

来自Mozilla Gecko FAQ:

问:可否从Unix shell脚本中调用Gecko引擎?能否发送HTML并获取返回的网页,以便打印?

答:不太支持;您可以通过使用Gecko的嵌入式API编写自己的应用程序来获得接近所需的功能。请注意,目前无法在没有屏幕小部件的情况下进行打印。

将Gecko嵌入到输出所需内容的程序中可能过于繁重,但至少您的输出将是最好的。


还可以添加这个教程:http://siliconforks.com/doc/parsing-javascript-with-spidermonkey/ - Jonas G. Drange

0

Selenium可以加载PhantomJS

$ ipython

In [1]: from selenium import webdriver

In [2]: browser=webdriver.PhantomJS()

In [3]: browser.get('http://seleniumhq.org/')

In [4]: browser.title
Out[4]: u'Selenium - Web Browser Automation'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接