python爬取腾讯视频评论

使用python selenium爬取腾讯视频评论

代码速递:

from lxml import etree
from selenium import webdriver
import json
# cursor url_1 url_2 page 用来组合成最终的url,由于不同评论页参数不同,所以将其单独拿出来
cursor=0
url_1 ="https://coral.qq.com/article/7020779138/comment/v2?callback=_article7020779138commentv2&orinum=10&oriorder=o&pageflag=1&cursor="
url_2 = "&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="
page = 1626362497912
# 用于xpath定位元素
text_xpath = '/html/body/pre/text()'
# webdriver配置
options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')
options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"')
driver = webdriver.Chrome('chromedriver.exe',options=options)
# 在项目下新建一个res.txt文件用于存储结果
file_handle=open('res.txt',mode='w',encoding='utf-8')
i = 0
# 爬取100页评论
for t in range(100):
    print(url_1+str(cursor)+url_2+str(page+t))
    # url_1+str(cursor)+url_2+str(page+t)是最终路径
    driver.get(url_1+str(cursor)+url_2+str(page+t))
    # 获取源代码,并解析
    html = etree.HTML(driver.page_source)
    text = html.xpath(text_xpath)
    print(text[0][28:-1])
    # 转换成json对象
    res = json.loads(text[0][28:-1])
    print(res['data'])
    # 修改cursor参数,用于下一页请求
    cursor = res['data']['last']
    print(cursor)
    # 打印评论,并将评论写入文件
    for comment in res['data']['oriCommList']:
        print('评论'+str(i)+':'+comment['content'])
        file_handle.write(str(i)+':'+comment['content']+'\n')
        i=i+1

所需依赖

  • webdriver:用于模拟浏览器请求网页,需要安装chrome和对应的chromedriver.exe,两个版本需要一致,chromedriver.exe需要与上面的py程序放在同一个文件夹下
  • xpath:用于解析和定位元素
  • json:用于将字符串解析成json对象,便于查找元素的属性值

示例说明

爬取思路

腾讯视频的评论使用的是ajax异步请求获取评论,所以直接爬取url下的源代码无法获得评论,即便有,也只有部分评论
在查询几篇前人的总结后,决定使用Fiddler抓取https请求
通过fiddler发现video.coral.qq.com下的https请求存在我们所需要找的评论信息
avatar
查找几个类似请求,观察其路径规则

观察后发现,两次请求cusor参数发生了变化,_参数后一个请求是前一个请求基础上再加1
通过解析请求中的数据后发现,后一个请求的cusor参数存储在前一个请求的last属性内
avatar

总结好规律后便可以开始编写代码,除第一次请求外,每次请求都需要获得last和content属性,last用于指向下一页评论地址,content内存储着用户评论,详细可见文章头部代码

posted @ 2021-07-16 14:00  codedogzlc  阅读(174)  评论(0编辑  收藏  举报