日志标签 ‘javascript’

Python 进行网页抓取(utf-8编码转换和基于webkit的抓取)

2012年6月29日

1、抓取与编码转换

对于抓取网页来说,python提供了urllib和urllib2来获取html源代码,也可以使用wget来下载页面。

一般抓取的网页都需要转换成UTF-8编码,很多中文网页采用GB2312、GBK等编码方式,尤其是GB2312的网页,其实里面含有非GB2312的字符,就会导致读取错误。

一般的抓取代码:
[gist]https://gist.github.com/xddaijun/6319585[/gist]

2、特殊网页的抓取

特殊网页:采用ajax进行传输的内容,通过javascript加载等直接读取HTML无法分析和抽取的。需要使用PhantomJS 进行处理得到准确的HTML。

PhantomJS 是一个基于webkit内核的javascript api,目前是是1.6版本。项目地址:https://code.google.com/p/phantomjs/

如这个网页:http://pic.news.sohu.com/911196/911317/group-362161.shtml#0,将里面的大图片采用javascript来进行下载,直接读取HTML获取不了大图。部分HTML代码如下:
截取选区_001
这样就需要有基于webkit的爬虫来获取HTML代码,PhantomJS正好来可以完成该功能。

获取网页源代码的PhantomJS可以这么实现:
gethtml.js
[gist]https://gist.github.com/xddaijun/6319591[/gist]
然后运行

phantomjs gethtml.js http://pic.news.sohu.com/911196/911317/group-362161.shtml#0

即可以获取到经过JS运行过的HTML代码:

截取选区_002

然后再将得到的HTML代码进行进一步的抽取,从而得到该页面的大图。