python爬取评论_python爬取网易评论

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

步骤如下:

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

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

812773-20151023181654505-1814120238.png

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

812773-20151023182656974-1858324545.png

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

812773-20151023182933536-282824404.png

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

数据为:

812773-20151023184026442-2051399623.png

2.其他评论页

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

812773-20151023184801177-1045668694.png

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

812773-20151023184824911-1638158864.png

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

812773-20151023184851145-1272761545.png

3.网址规律

一开始以为网址后面的

812773-20151023185242036-347807535.png有什么规律,后来发现去掉也没影响,

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

4.代码

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

1 #encoding=utf-8

2

3 importurllib24 importjson5 importre6 importtime7 classJSON():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 defgetUrls(self,pageIndex):13 url2='http://comment.news.163.com/cache/newlist/news_guonei8_bbs/SPEC0001B60046CG_'+str(pageIndex)+'.html'

14 returnurl215 defgetHtml(self,url):16 try:17 request=urllib2.Request(url,headers=self.headers)18 respone=urllib2.urlopen(request)19 html=respone.read()20 returnhtml21 excepturllib2.URLError,e:22 if hasattr(e,'reason'):23 print u"连接失败",e.reason24 returnNone25 #处理字符串,没有处理干净的可以再打开文件进行处理

26 defstrDeal(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(" \[")32 data=reg.sub('--',data)33 reg2=re.compile('<\\\/a>\]')#<\/a>]的正则?

34 data=reg2.sub('',data)35 reg3=re.compile('
')36 data=reg3.sub('',data)37 returndata38 #解析json数据并存入文件

39 defparserJson(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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值