首页 > 学院 > 开发设计 > 正文

python爬取网易评论

2019-11-14 16:57:28
字体:
来源:转载
供稿:网友

学习python不久,最近爬的网页都是直接源代码中直接就有的,看到网易新闻的评论时,发现评论时以json格式加载的.....

爬的网页是习大大2015访英的评论页http://comment.news.163.com/news_guonei8_bbs/SPEC0001B60046CG.html

步骤如下:

1.使用谷歌浏览器分析网页首页加载的数据

 打开网页----按下F12----点击Network,此时是空的

刷新以后,会出现如下图:(我以前加载过页面,所以json数据显示的不全)

点击其中的一个json格式的文件,找到url,并在网页中打开,看看是不是自己想要的数据:

我第一次访问网页的时候打了三个,只有一个是并论的内容,首页的网址为:

http://comment.news.163.com/data/news_guonei8_bbs/df/SPEC0001B60046CG_1.html?_=14455959217790 

数据为:

2.其他评论页

在点击其他评论页时,先点击一下Network中的清除按钮,方便查找json---从第二页开始观察,几乎都一样

点击找到url,并在浏览器中打开

数据虽然是乱码的,在Python中读取到的是可以正常查看的

 

3.网址规律

一开始以为网址后面的有什么规律,后来发现去掉也没影响,

所以只要把页数换成对应的评论页就好了(我只能打开34页??)

4.代码

注:由于数据开始有变量名,结尾有分号,在使用json.loads(data)时报错,所以先对数据进行处理

 1 # encoding=utf-8 2  3 import urllib2 4 import json 5 import re 6 import time 7 class JSON(): 8     def __init__(self): 9         self.user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'10         self.headers={'User-Agent':self.user_agent}11         self.url1='http://comment.news.163.com/data/news_guonei8_bbs/df/SPEC0001B60046CG_1.html'12     def getUrls(self,pageIndex):13         url2='http://comment.news.163.com/cache/newlist/news_guonei8_bbs/SPEC0001B60046CG_'+str(pageIndex)+'.html'14         return url215     def getHtml(self,url):16         try:17             request=urllib2.Request(url,headers=self.headers)18             respone=urllib2.urlopen(request)19             html=respone.read()20             return html21         except urllib2.URLError,e:22             if hasattr(e,'reason'):23                 PRint u"连接失败",e.reason24                 return  None25     #处理字符串,没有处理干净的可以再打开文件进行处理26     def strDeal(self,data,pageIndex):27         if pageIndex==1:28             data=data.replace('var replyData=','')29         else:30             data=data.replace('var newPostList=','')31         reg=re.compile("&nbsp;/[<a href=''>")32         data=reg.sub('--',data)33         reg2=re.compile('<////a>/]')#<//a>]的正则?34         data=reg2.sub('',data)35         reg3=re.compile('<br>')36         data=reg3.sub('',data)37         return data38     #解析json数据并存入文件39     def parserJson(self):40         with open('wangyi2.txt','a') as f:41             f.write('用户ID'+'|'+'评论'+'|'+'点赞数'+'/n')42         for i in range(1,35):43             if i==1:44                 url=self.url145                 data=self.getHtml(url)46                 data=self.strDeal(data,i)[:-1]47                 value=json.loads(data)48                 f=open('wangyi2.txt','a')49 50                 for item in value['hotPosts']:51                     f.write(item['1']['f'].encode('utf-8')+'|')52                     f.write(item['1']['b'].encode('utf-8')+'|')53                     f.write(item['1']['v'].encode('utf-8')+'/n')54                 f.close()55                 print 'sleeping pageload %d/34'%i56                 time.sleep(6)57             else:58                 url=self.getUrls(i)59                 data=self.getHtml(url)60                 data=self.strDeal(data,i)[:-2]61                 # 转换,一开始得到的数据类型为str,使用json.loads()函数,得到原始数据,此时的value的数据类型为dict,接下来就可以正常访问字典了。62                 value=json.loads(data)63                 f=open('wangyi2.txt','a')64 65                 for item in value['newPosts']:66                     f.write(item['1']['f'].encode('utf-8')+'|')67                     f.write(item['1']['b'].encode('utf-8')+'|')68                     f.write(item['1']['v'].encode('utf-8')+'/n')69 70                 f.close()71                 print 'sleeping pageload %d/34'%i72                 time.sleep(6)73 74 75 js=JSON()76 js.parserJson()

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表