如何使用Python解析网页[html]上包含[dynamic]的Java脚本?

如何使用Python解析网页[html]上包含[dynamic]的Java脚本?,python,web-crawler,beautifulsoup,Python,Web Crawler,Beautifulsoup,我正在构建一个蜘蛛,我正在使用BeautifulSoup解析特定URL的内容。 现在,一些站点正在使用Java脚本来显示动态包含,一旦某个动作[单击或时间]发生,就会显示给用户。 BeautifulSoup只解析java脚本标记运行之前的静态包含。 我希望在java脚本运行后包含。 有没有办法做到这一点 我可以想出一种方法:抓取url,打开浏览器并运行此url和java脚本标记。然后将此url传递给Beautiful soup,它可以查看java脚本[dynamic contains]生成的内容

我正在构建一个蜘蛛,我正在使用BeautifulSoup解析特定URL的内容。 现在,一些站点正在使用Java脚本来显示动态包含,一旦某个动作[单击或时间]发生,就会显示给用户。 BeautifulSoup只解析java脚本标记运行之前的静态包含。 我希望在java脚本运行后包含。 有没有办法做到这一点


我可以想出一种方法:抓取url,打开浏览器并运行此url和java脚本标记。然后将此url传递给Beautiful soup,它可以查看java脚本[dynamic contains]生成的内容。然而,如果我正在抓取数百万个链接,那么这个解决方案是没有用的。如果有一些内置模块可用,它可以生成Html页面的动态包含

准确解析网页中Javascript增强内容的最佳方法是通过浏览器引擎加载网页。幸运的是,有一些方法可以在Python中实现自动化

我最成功的方法是使用,它允许您从Python应用程序中以编程方式创建和控制Webkit浏览器引擎的实例。我还使用了简化页面上下文中Javascript的执行

另一个选择是,我只用于实验

下面是一个使用pywebkitgtk和jswebkit从Webkit呈现的页面提取数据的工作示例。在生产环境中,您需要并行运行其中几个处理器,每个处理器都渲染到其自己的实例

示例输出:

http://www.google.com/
[<InputElement 2a64a78 name='btnG' type='submit'>, <InputElement 2a64bb0 name='btnG' type='submit'>, <InputElement 2a64ae0 name='btnI' type='submit'>]
http://www.google.com/
[, ]

谢谢samplebias。问题是,它给了我一个错误,说“无法打开显示”。。。我已经尝试了一切,比如在python中设置显示变量或使用-c选项。然而,我也犯了同样的错误。有什么办法吗?问题源于gtk/webkit无法连接到X显示器以显示浏览器窗口。如果要通过ssh连接到服务器,则需要在会话上使用X并启用X11转发,例如
ssh-Y[远程主机]
。这应该设置shell$DISPLAY变量,您可以使用
echo$DISPLAY
验证该变量。当然,这里有指向的链接和指向的直接链接。我只在Ubuntu 10.04+上使用过这段代码;我没有在Centos 5.x下运行的经验。谢谢你。我正在努力,一旦我完成了,我会让你知道的。我只是对包[jswebkit]很好奇。它有.pyx文件和.pyi文件。目前,我计划将这些文件都放在网站包中。问题是,我需要安装任何与CPython相关的东西吗?我可能无法提供详细的构建信息,因为我个人从未在Centos上构建过Webkit/JavascriptCore堆栈。我非常确定jswebkit需要最新版本的Cython(如0.14)来构建。安装Cython后,您应该能够使用
python setup.py bdist\u RPM
为jswebkit构建RPM。
http://www.google.com/
[<InputElement 2a64a78 name='btnG' type='submit'>, <InputElement 2a64bb0 name='btnG' type='submit'>, <InputElement 2a64ae0 name='btnI' type='submit'>]