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') + ('|')) 报错
后来在源代码中发现并不是所有评论都有名字来对应,百度后,改为
****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()
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爬取网易评论
- python关于用BeautifulSoup爬取网易动态评论
- 提取网易的链接及链接名称 分类: python 小练习 正则表达式 2013-11-07 14:02 382人阅读 评论(0) 收藏
- python爬取有关熊安新区的网易评论
- python爬取网易动态评论
- Python实现的爬取网易动态评论操作示例
- python爬取网易评论
- Python 爬取网易云评论
- 网易评论~~~有意思
- python基础知识-字符串的通用操作 分类: python 2012-11-29 19:57 252人阅读 评论(0) 收藏
- 插件基础篇7:jquery 新浪网易的评论块制作
- python中map()函数的使用 分类: python 2012-12-20 16:18 121人阅读 评论(0) 收藏
- file()创建文件方法 分类: python python基础学习 2012-12-24 18:17 239人阅读 评论(0) 收藏
- 国无高铁 。。。网易的评论很有意思
- file()拷贝文件 分类: python 2012-12-24 16:44 138人阅读 评论(0) 收藏
- 转至网易评论
- 求s=1+1+2+1+2+3+1+2+3+4......+n 分类: python 2012-12-05 15:04 387人阅读 评论(0) 收藏
- 计算s=n*(n-1)*(n-2)*.....1 分类: python 2012-12-13 20:29 171人阅读 评论(0) 收藏
- jquery 新浪网易的评论块制作
- php配合ajax实现仿网易文章评论效果