您的位置:首页 > 编程语言 > Python开发

python爬网易评论

2016-11-25 20:06 281 查看
这次需要爬json格式加载的网易评论
http://comment.news.163.com/news_junshi_bbs/C6DJ335R000181KN.html
这是我爬的评论网页,像往常一样打开页面源代码之后,愣了一下,发现什么评论文字都没有,各种查询之后,知道在查看元素中获取信息,在找到所需要的信息前真是道路坎坷,最后发现只有写有hostlist和newlist才可以实现愿望,即



复制打开网址后,发现json格式跟平常的确实不一样

开头部分:



结尾部分:



接下来,代码中就要有处理数据步骤,将开头的‘getData(’ 与结尾的‘);’删除。

2.在这里,需要知道json解码与python编码知识点:

json.dumps()方法可以将Python对象编码为json字符串(encoding)

json.load()方法可以将json格式的字符串解码为Python对象(decoding)

3.爬取结果应该是姓名对应评论,所以对字典进行key取值,在对姓名取值时,写

f.write(data['comments'][i]['nickname'].encode('utf-8') + ('|')) 报错
后来在源代码中发现并不是所有评论都有名字来对应,百度后,改为
f.write(data['comments'][i]['user'].setdefault('nickname','None').encode('utf-8') + ('|'))     成功

****setdefault用法:获取字典的信息,若key不存在,就加上这个(key,value)项目,存在则字典保持不变。

4.准备工作完成后,就开始分开爬取了。(注:网易评论分为热门和最新,而且热门只在第一页,故令k=0负责热门的爬取,剩下的负责最新,完美!!)
5.由于最新内容多,所以加时间限制,完整代码如下:

# -*- coding:utf-8 -*-

import re
import urllib2
import json
import time

def getitem():
reg = re.compile(r'getData\(')
data = reg.sub('', html)
reg1 = re.compile(r"\)\;")
data = reg1.sub(' ', data)
data = json.loads(data)
for i in data['comments']:
print i
f = open('kk.text', 'a+')
# f.write('用户名'+'|'+'评论'+'\n')
f.write(data['comments'][i]['user'].setdefault('nickname', 'None').encode('utf-8') + ('|'))
f.write(data['comments'][i]['content'].encode('utf-8') + '\n')
f.close()

for k in range(0, 22):
if k == 0:
url1 = 'http://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C6DJ335R000181KN/comments/hotList?offset=0&limit=40&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc'
user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0"
headers = {'User-Agent': user_agent}
response = urllib2.Request(url1, headers=headers)
html = urllib2.urlopen(response).read()
print html
else:
url2 = 'http://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C6DJ335R000181KN/comments/newList?offset=%d&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc&_=1479733742433'%k
user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0"
headers = {'User-Agent': user_agent}
response = urllib2.Request(url2, headers=headers)
html = urllib2.urlopen(response).read()
time.sleep(2)
print html
getitem()




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 博客