Selenium解决动态渲染页面----爬取网易云音乐全部评论

爬取网易云音乐全部评论,我们先随便找一首歌,这里以毛不易的水乡为例。毛不易–水乡

一、常规方法

1. 尝试直接爬取

先直接用歌曲链接直接爬取

import requests

#URL
url = 'https://music.163.com/#/song?id=1408763442'
#请求头
headers = {
      
     "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
}

#发送请求
response = requests.get(url,headers = headers)
#解码
data = response.content.decode('utf-8')
#写入文件
with open('wangyiyun.txt','w',encoding = 'utf8') as f:
    f.write(data)

但是里面并没有我们想要的评论信息
在这里插入图片描述

2. 分析network,寻找目标文件

进入网页的“最新评论区”,我们每点击底下的“下一页”,网站的url并没有任何变化,说明整个评论区的内容都是通过Ajax异步请求技术得到的。我们右击检查进入开发者模式,在network下可以看到交互的全部数据。
在这里插入图片描述
现在我们的目标就是从里面找到藏有 “评论” 的文件,对于动辄几十上百个文件的网页来说,一个个找太浪费时间了,我们可以想既然是评论,那么必定是从服务器的数据库里提取的一大串文本,然后传输给咱的浏览器。所以,我们可以再过滤一下,这里可以单独查看 XHR 类型和 Doc 类型的文件。
XHR 即 XMLHttpRequest,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。
通过Ajax异步请求技术得到的数据一般是在XHR里面的,果然我们在XHR中发现评论位于 R_SO_4_1408763442?csrf_token= 这个文件中。
在这里插入图片描述
选中R_SO_4_1408763442?csrf_token= 这个文件,点击 “Headers” 。我们可以看到此处请求的url为https://music.163.com/weapi/v1/resource/comments/R_SO_4_1408763442?csrf_token=
并且他是个post请求,带两个参数“params” 和 “encSecKey” 。
在这里插入图片描述

3. 下载目标文件

使用这个链接带上参数访问,看看有没有评论数据。

import requests

#URL
url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_1408763442?csrf_token='
#请求头
headers = {
      
     "User-Agent": 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
     #'referer': "https://music.163.com/song?id=1405283464"
}

params = "COX3x19Pu9O4J8+jm2A6xzQjLhUcAi9x+HZpKhw1Jv3SD3wvXzZ5mzZdX0rLzVrLCIJ5g1MQI/L3waiLa018uY57/r0rg/qBjwhlZsCM8sgdNSxd8rOCzkgUHPif0E8uSCoYpI8g4FqtR8TyZCsNmEkO+nwCCEBxZlCkSKW1hpSIFV/puhZwzDJ+3nQ+tPz3"
encSecKey = "18fbf2957d5334b58c45821b34b6d1f13de9c1f144743f3d60972a7957e83ac49313f1d2b5e267c279f88a767e28d03b409f3ab6b53c779622c849c80e8c436b9cf2bca51831505083cc2ffe200a9bb0a597f077d1467c236935a9487a63bba5ac5283264de92097450f044b8cbec99a48471225d0c604fc553e38d8173f66ae"
data = {
   
    'params':params,
    'encSecKey':encSecKey
}

#发送请求
response = requests.post(url,headers = headers,data = data)
#解码
#data = response.content.decode('utf-8')
##data = response.text
##写入文件
#with open('wangyiyun.html','w', encoding="utf-8") as f:
#    f.write(data)

with open('comments.txt', 'w', encoding=</
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值