本文实例讲述了Python实现的爬取网易动态评论操作。分享给大家供大家参考,具体如下:
打开网易的一条新闻的源代码后,发现并没有所要得评论内容。
经过学习后发现,源代码只是一个完整页面的“骨架”,而我所需要的内容是它的填充物,这时候需要打开工具里面的开发人员工具,从加载的“骨肉”里找到我所要的评论
圈住的是类型
找到之后打开网页,发现json类型的格式,用我已学过的正则,bs都不好闹,于是便去了解了正则,发现把json的格式换化成python的格式后,用列表提取内容是一条明朗的道路。。。
但是在细致分析的时候也发现了问题
从这里获得每条评论时,感觉有点不对,观察发现如果是回复评论的评论会出现他回复那条评论的数据,于是用正则提取了一下
最终的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#coding=utf-8
__author__ = 'kongmengfan123'
import urllib
import re
import json
import time
def gethothtml(url): #最热评论
page = urllib.urlopen(url)
html = page.read()
get_json(html)
def gethnewtml(): #最新评论有5页
for i in range ( 1 , 6 ):
url = 'http://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C4QFIJNS0001875O/comments/newList?offset=%d&limit=30&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc&_=1478010624978' % i * 30
page = urllib.urlopen(url)
html = page.read()
time.sleep( 1 )
get_json(html)
def get_json(json_):
end_ = re. compile (r '\);' ) #将json网页转化成python数据
begain = re. compile (r 'getData\(' )
json_ = begain.sub('',json_)
json_ = end_.sub('',json_)
ajson = json.loads(json_)
lis = ajson[ "commentIds" ] #获得每条评论的键
n = 0
for i in range ( 1 , len (lis)):
try :
xulie = re. compile ( '\d{10,}' ) #取得准确评论的键(去掉回复)
bia = re.findall(xulie,lis[n])
w.write(ajson[ 'comments' ][bia[ len (bia) - 1 ]][ 'user' ][ 'nickname' ].encode( 'utf-8' ) + '|' )
except KeyError:
w.write(ajson[ 'comments' ][bia[ len (bia) - 1 ]][ 'user' ][ 'location' ].encode( 'utf-8' ) + '|' )
if ( len (lis[n])> 13 ):
xulie = re. compile ( '\d{10,}' )
bia = re.findall(xulie,lis[n])
w.write(ajson[ 'comments' ][bia[ len (bia) - 1 ]][ 'content' ].encode( 'utf-8' ) + '\n' )
else :
w.write(ajson[ 'comments' ][lis[n]][ 'content' ].encode( 'utf-8' ) + '\n' )
n = n + 1
return lis
w = open ( 'wangyi.txt' , 'w' )
w.write( '用户名' + '|' + '热门评论' + '\n' )
hot_ = gethothtml( 'http://comment.news.163.com/api/v1/products/a2869674571f77b5a0867c3d71db5856/threads/C4QFIJNS0001875O/comments/hotList?offset=0&limit=40&showLevelThreshold=72&headLimit=1&tailLimit=2&callback=getData&ibc=newspc' )
w.write( '用户名' + '|' + '最新评论' + '\n' )
gethnewtml()
w.close()
|
成功。
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/xiao_ao_jiao_renzhen/article/details/53025473