前言
本项目来自Baidu AI Studio相关python课程。
aqy评论爬取
请求数据
首先分析想要爬取的页面评论。
在每次点击获取评论时,都会有一个get_comments的请求,请求中的url就是我们所需要的请求链接。
https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&content_id=15472234400&hot_size=0&page=&page_size=20&types=time&last_id=241192681621
该页面请求评论的机制是,通过获取last_id,最后一个显示的评论,来获取之后的评论,只要不断更改last_id不断请求,就能拉取所有评论。
思路就有了,不断请求获取评论的URL,获取评论。
这里使用的是Session建立一个会话,不建立其实也没问题。
def getMovieinfo(url):
'''
请求爱奇艺评论接口,返回response信息
参数 url: 评论的url
return: response信息
'''
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0", #请求来源设置
"Accept": "application/json",# 客户端能接受的内容
"Referer": "https://www.iqiyi.com/v_19ryhrmpcc.html#curid=15472234400_2d7e859019eb31bf551d6a90e8daedcf",
"Origin": "http://m.iqiyi.com", # 指明请求来自于哪个站点
"Host": "sns-comment.iqiyi.com",#请求web服务器域名地址
"Connection": "keep-alive", # 保持连接
"Accapt-Language": "en-Us,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-Tw;q=0.6", # 优先显示的语言
"Accept-Encoding":"gzip, deflate" # 支持的返回压缩格式
}
response = session.get(url, headers=headers)
if response.status_code == 200: # 响应成功
return response.text
return None
思路:输入分析得到的评论获取url,使用getMovieinfo得到json格式的响应,json格式数据转换为字典,可以通过 [‘data’][‘comments’] 标签把评论部分提取出来,content是其中的文字部分。
comments中包含很多条评论信息,每次循环VAL中是一条评论信息,如果这条评论信息中有中文和lastID,那么就是一条有效信息,把cantent部分提取出来,lastID也提取为下一步的请求做准备。
def saveMoviernforoFile(lastId,arr):
# '''
# 解析json数据,获取评论
# 参数lastrd:最后一条评论ID arx:存故文本的1ist
# return:新的lastrd
# '''
url="https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&content_id=15472234400&hot_size=0&page=&page_size=20&types=time&last_id="
url+=str(lastId)
responseTxt=getMovieinfo(url)
responseJson=json.loads(responseTxt)
comments=responseJson['data']['comments']
for val in c