设为首页 收藏本站
查看: 1031|回复: 0

[经验分享] python爬取网易评论

[复制链接]

尚未签到

发表于 2015-11-29 07:22:40 | 显示全部楼层 |阅读模式
  学习python不久,最近爬的网页都是直接源代码中直接就有的,看到网易新闻的评论时,发现评论时以json格式加载的.....
  爬的网页是习大大2015访英的评论页http://comment.news.163.com/news_guonei8_bbs/SPEC0001B60046CG.html
  步骤如下:
  1.使用谷歌浏览器分析网页首页加载的数据
  打开网页----按下F12----点击Network,此时是空的
DSC0000.png
  刷新以后,会出现如下图:(我以前加载过页面,所以json数据显示的不全)
DSC0001.png
  点击其中的一个json格式的文件,找到url,并在网页中打开,看看是不是自己想要的数据:
DSC0002.png
  我第一次访问网页的时候打了三个,只有一个是并论的内容,首页的网址为:
  http://comment.news.163.com/data/news_guonei8_bbs/df/SPEC0001B60046CG_1.html?_=14455959217790
  数据为:
DSC0003.png
  2.其他评论页
  在点击其他评论页时,先点击一下Network中的清除按钮,方便查找json---从第二页开始观察,几乎都一样
   DSC0004.png
  点击找到url,并在浏览器中打开
   DSC0005.png
  数据虽然是乱码的,在Python中读取到的是可以正常查看的
  
   DSC0006.png
  3.网址规律
  一开始以为网址后面的 DSC0007.png 有什么规律,后来发现去掉也没影响,
  所以只要把页数换成对应的评论页就好了(我只能打开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 url2
15     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 html
21         except urllib2.URLError,e:
22             if hasattr(e,'reason'):
23                 print u"连接失败",e.reason
24                 return  None
25     #处理字符串,没有处理干净的可以再打开文件进行处理
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 data
38     #解析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.url1
45                 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'%i
56                 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'%i
72                 time.sleep(6)
73
74
75 js=JSON()
76 js.parserJson()
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144738-1-1.html 上篇帖子: Python之虚拟环境管理 下篇帖子: [Python] 利用Django进行Web开发系列(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表