吉吉于

【Python】关于如何抓取ajax评论

最近需要抓取一些网站的评论来分析,但是大多数网站评论都是ajax来获取的,那么如何使用python来爬取呢?

方案:1.抓包,分析评论js来源

2.phantomjs

3.casperjs

4.py-spidermonkey

5.pyv8

6.ghost.py

7.selenium

大致这么几种方案,每种我都尝试了一下,有的安装太困难,就切换方案了。

如果把环境都配置好的话,我估计要选择ghost.py。

最后选的第一种,用chrome抓包js评论的来源网址,然后分析参数,最后拼接js的地址。

下面就讲讲怎么抓,挺白痴的教程。

1.打开地址:http://v.youku.com/v_show/id_XMjY5OTQ3OTMy.html

2.chrome审查元素,切换到network下,选中scrpts

061C86C1 CCB6 4569 B5ED 3BF45AC7F0C5

3.点击第二页评论

NewImage

4.这时候看见优酷的评论是通过调用一个url接口,最后生成json格式的数据

http://comments.youku.com/comments/~ajax/vpcommentContent.html?__ap=%7B%22videoid%22%3A%22XMjY5OTQ3OTMy%22%2C%22sid%22%3A582851679%2C%22page%22%3A2%2C%22last_modify%22%3A1382349559%2C%22showid%22%3A60608%7D&\__ai=&__callback=displayComments

5.分析上边的url,把能删掉的字段去掉,比如last_modify可以删掉,最后形成如下格式的链接

http://comments.youku.com/comments/~ajax/vpcommentContent.html?__ap=%22videoid%22:%22′+视频ID+’%22,’+’%22page%22:’+页数+’

其中视频ID就是http://v.youku.com/v_show/id_XMjY5OTQ3OTMy.html里的XMjY5OTQ3OTMy

6.最后用正则表达式来匹配json数据

7.其中python来处理json里的编码,我没有找到很好的方式

于是自己写了一个函数来处理,有时会报错,不过比较少,try掉就可以了。

import urllib2
import simplejson as json

def pyunescape(jsescapse):
    """
    python解析经javascrpt的escapse()加密的字符串
    """
    try:
    	unescaped = json.loads('"'+urllib2.unquote(jsescapse.replace('%u','\\u'))+'"')
    	return unescaped
    except:
    	return None
如果你有更好的方法,分享一下呀!~~

转载请注明:于哲的博客 » 【Python】关于如何抓取ajax评论