两天时间的努力,终于可以爬取多页评论了。
找规律很复杂。
代码如下:(初稿2018.9.17)
(有很多不好的地方,慢慢会修改)
import urllib.request
import re
import urllib.parse
#视频编号(自己修改)
vid=3097941562
def select(page,last):
url='https://video.coral.qq.com/varticle/'+str(vid)+'/comment/v2?callback=_varticle'+str(vid)+'commentv2&orinum=10&oriorder=o&pageflag=1&cursor='+str(last)+'&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=9&_='+str(page)
heads=[("Accept","*/*"),
("Accept-Encoding","gzip, deflate, br"),
("Accept-Language","zh-CN,zh;q=0.9"),
("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")]
data=urllib.request.urlopen(url).read().decode("utf-8")
data=str(data)
idpat='&nick=(.*?)&'
conpat='"parent":"0".*?"content":"(.*?)",'
pat = '"last":"(.*?)"'
idlist=re.compile(idpat,re.S).findall(data)
conlist=re.compile(conpat,re.S).findall(data)
firs = re.compile(pat, re.S).findall(data)
#定义first为全局变量
global first
first = firs[0]
for i in range(0,10):
try:
id=eval('u"'+idlist[i]+'"')
con=eval('u"'+ conlist[i] +'"')
id=urllib.parse.unquote(id)
print(id)
print(con)
except UnicodeEncodeError as e:
print('-------------含字符')
except IndexError as e :
print('---*****少一个')
url='https://video.coral.qq.com/article/'+str(vid)+'/commentnum?callback=_article'+str(vid)
heads=[("Accept","*/*"),
("Accept-Encoding","gzip, deflate, br"),
("Accept-Language","zh-CN,zh;q=0.9"),
("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")]
pdata=urllib.request.urlopen(url).read().decode("utf-8")
pdata=str(pdata)
pagepat='"time":(.*?)}'
page=re.compile(pagepat,re.S).findall(pdata)
page=int(page[0])
first =0
for i in range (0,5):
select(page, first)
page+=1
print('------------------------')
i+=1
print('第'+str(i)+'页')
几点需注意:
局部变量与全局变量的使用。
正确使用正则表达式。
模拟浏览器登入。
找准关键参数。
不足:
url太长,有待修改。
表情的解码,有待学习。