您的位置:首页 > Web前端 > JavaScript

爬虫第三战 json爬取网易新闻

2016-12-14 21:04 232 查看

出洞,写代码,本熊这次要带来的新内容是涉及到一部分动态网页的问题,爬取网易新闻,感觉这次难度不是一般的大,好吧,,其实我每次都是这么想的。我什么时候能写出非常棒的代码呢(图样图森破),转回正题,NOW

如果按以前的老套路一定是上网址,放代码等等但这次这个套路似乎已经行不通了,当打开新闻评论所在的网址的源代码时,搞什么!!什么也没有,莫方莫方,不是我们的评论被黑掉了,只是我们的打开方式不正确,换个姿势试一下,在评论页面按下f12有惊喜,dell机如果用着快捷键需要fn+f12才好,点击网络,刷新,在其中找到 json ,在json项目下发现了这个家伙



打开,是不是里面有那些“藏起来的”评论,



那么现在就需要处理这些长着字典样子的json文件了,在处理之前先要把那些不需要的东西删除,接下来,将在代码中具体解决这些问题

# coding:utf-8
import re
import urllib2
import json # 我们的新伙伴
import time
class Counter(dict):
def _missing_(self,key):
return None
for l in range(0,3):
url = 'http://comment.sports.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C56ACHMM00058782/comments/newList?offset=%d&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc&_=1478429803769' %l
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0' # 进行模拟登陆
headers = { 'User-Agent' : user_agent }
response = urllib2.Request(url, headers=headers)
html = urllib2.urlopen(response).read() # 打开读取网址
def getitem():
reg = re.compile(r'getData\(')
data = reg.sub('',html)
reg1 = re.compile(r"\)\;")
data = reg1.sub(' ', data) # 包括之前的几步都是处理源码,将多余的部分删掉使它成为json格式
f = open('yi6.text' , 'a+') # 打开文本
json_ = json.loads(data) # 格式转换
c = Counter(json_)
for i in json_['comments']:
f.write(json_['comments'][i]['user'].setdefault('nickname' , 'none').encode('utf-8')+('|') ) # 以字典的方式获取内容并写入
f.write(json_['comments'][i]['content'].encode('utf-8')+'\n')
f.close()
getitem()
按照套路到这里就应该说结束语了,毕竟这个模块从一开始就反常结尾怎么会不反常呢,在这要解释一个东西,在一开始调用Counter,



使setdefault构成一个判断,当字典中nickname不存在时,不会报错而是输出none代替

欢迎各位大神批评指教,THANKS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json 正则 python