最新消息:

Python中获取Javascript渲染后的HTML源码

技术讨论 hamo 7335浏览 0评论

Get Rendered HTML Source In Python

前因:

现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面。这对采集来说,是一个很大的挑战。

在火车头当中,对于Ajax获取的数据的话,可以手动分析页面提取的Ajax的处理url,然后来提取。但是对于复杂的session验证(特别是.NET的网站来说)处理比较困难。

另外一方面,对于javascript生成的页面,火车头也没法直接提取。

思路:

首先明确的是必须获取Javascript渲染结束后的结果。这一点是明确的,具体就是方法就因人而异。

而自己解决Javascript渲染无异于痴人说梦,所以必须借助现有的浏览器核心,比如Gecko、WebKit、IE。如果用Java开发的话可以Jrec这个库,它封装了Gecko。如果其他的语言,而且是在windows平台上的话,最简单的就是用——

COM,用Internet Explorer 提供的com组件。

解决方案:

突破了这层关系,下面的就水到渠成了。

在python下,对IE封装的比较完善而且文档齐全的就是PAMIE(http://sourceforge.net/projects/pamie),它的本意是作为自动化测试工具使用的。

需要注意的是,在页面加载完之后需要留出一定时间来让页面的js代码执行渲染完成后再提取html代码。这个时间需要通过试验确定。

需要注意的是:
前面所述的利用PAMIE来获取渲染后的html内容的方法是可行的,但是缺点是效率非常低。对于最常见的ajax动态内容页面来说,最直接的方法还是构造ajax请求,来获取相应内容。这样效率很高,而且返回数据都是结构化的xml或者json数据,比html更容易处理。

转载请注明:哈默博客 » Python中获取Javascript渲染后的HTML源码

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. 很期待下文
    r0c2009-12-15 01:47
  2. 我试图解决这个问题,但是现在遇到难题了,问题如下贴所示,希望能够帮忙一同解决: http://topic.csdn.net/u/20100306/09/f82b81e0-4714-4272-8f3b-867407bd1150.html?seed=1881368546&r=63754947#r_63754947 谢谢!
    阿海2010-03-06 23:27
  3. 我记得我后来已经很完美的解决了,就是这个思路。
    hamo2010-03-06 23:51
  4. @hamo 问题已经解决了,原帖中的代码没有什么问题,是我的Python或wxPython安装出了问题,在执行的时候无故报错,谢谢!
    阿海2010-03-09 12:32