网易云爬虫评论(Selenium 方式)——Part 2 缝缝补补(又是失败但进步的一天)

网易云评论——动态加载页面网络请求分析

使用Selenium抓取网易云歌曲界面评论问题

接前文所述,使用selenium抓取网易云界面出现代码返回不稳定的问题,当时我以为是网络问题,换了3台电脑测试后依旧存在,则说明前述代码的数据抓取成功是小概率事件,找问题!

查找问题

由于网页是动态加载,动态加载的网页通常意味着页面的某些部分(如评论、图像、文章等)在页面初次加载后,会在用户与页面互动或在一定时间后通过JavaScript异步请求数据并填充到页面中,因此,想要稳定获取到元素信息,需要进一步做出如下判断:
用户行为触发:如滚动页面、点击按钮或切换标签(测试-无效
时间触发:页面上的脚本可能在加载后一段设定的时间自动请求数据(测试-无效
连续的数据流:在诸如社交媒体动态、实时新闻更新、股票行情等实时数据显示中,页面可能不断地请求和更新数据(测试-无效

网络请求分析

最开始接触爬虫的时候,非常讨厌这一步,所以学的很一般(这也是我选择使用selenium的原因,简单啊),现在发现绕不开,排查!

使用Chrome的Network tab捕获和分析网络请求,审查响应数据(通常是XHR(XMLHttpRequest)或Fetch类型)发现了我们想要Response的真正数据内容,复制请求为cURL(包括所有必需的头信息和请求参数),得到cURL后将捕获的cURL请求转换成Python代码以进行API调用,开干!

然后我就找到了我真正想要的内容(用户ID、评论内容、评论时间、点赞量,ps:连操作系统,用户的ip地址、位置都可以看到,好刑):
在这里插入图片描述
在这里插入图片描述

以下是我复制得到的cURL内容(bath):
curl ‘https://music.163.com/weapi/comment/resource/comments/get?csrf_token=6a17624dc619311f848f748d5515e3fe’
-H ‘accept: /
-H ‘accept-language: zh-CN,zh;q=0.9’
-H ‘content-type: application/x-www-form-urlencoded’
-H ‘cookie: NMTID=00O8TUobjEOhzrlJUZdrro7yaZQTJMAAAGOZP7SwA; iuqxldmzr=32; ntes_nnid=231cfb14e123d1b28f37699546283464,1711091408538; ntes_nuid=231cfb14e123d1b28f37699546283464; WEVNSM=1.0.0; WNMCID=mnibrs.1711091413648.01.0; WM_TID=A%2BzQA9FyeYtBVRBBEUaB7Hh0%2B%2B24iyvS; sDeviceId=YD-xYOB2XKq%2BqZABxFBVEbAuWkl%2B%2FmrKPOg; __snaker__id=4T7HduoPRdfemDZE; MUSIC_U=007BE54E7E2250EEA12ABC090FE85697A2D88C62DA7F7B235630D9E05AC0A9C470C75AE4CAF39D900CF2F299298521392533AD8447BBF047EAE9CD087FE79B3F68652E09C67140A7CD672BC903961501D12EA1252BDE251A3B759A0446A37935EF5982DE092B9A2E57A13D95A043787ADB5B74952577BCA226FA0A5BDE8C6BA4061D8316682AEE394BB66C5C3201577B37157F38D0AED8D555F0F9FCF8A8847E2CC5E4FE73EC10F23C5AF62AB232478A3E48EACC93E49F66090C95FD345C8AC1F568FF98ED183872D8F5BE288B6A9194F04D287ACE3704D969CA264132417F8411989572662731C454F2A0E798B5079C0055A938BD2F28D44156B1C728F33684DDECE61274D3ECD4562BAB5EB2AA9A44B0ACBB7E18DAD7B533FFEE7F8DCE5C972E6772CE0A51627D2CA5C2E5C8332307680E70F04178DF601A01D64940C383D04F75E06B17FF684AF52F123D41C44B3FEA2EA657A08FAEF889AE0909F2A8B6C651; ntes_utid=tid..qZAgk5Z25ARAQgRERQOFvClwu%252BjubOfD..0; __csrf=6a17624dc619311f848f748d5515e3fe; __csrf=6a17624dc619311f848f748d5515e3fe; JSESSIONID-WYYY=e%5C0tg1cpBM%2FiDifmg0OhZE9srxmE96xNpQWsbu9Qo4e%5CseC1SoM1kYS%2F5WkQagzMdU9bt9lp%5CIZbD3%2B2Bu90FyNGAGrKM6ZmvrcTKarpc5z1YCyp6M3%2Bwsks8kV%2BUZwvB3yjYtXCc7qGGU%2Bhg9F9n5XqPp61wglqjObqUKKHsay97ymy%3A1714535053817; WM_NI=hXUC4eo%2F7s3tzSfSiQ2c%2BHaZKdwDcEoWxosUSKQxCp%2BDnBfRZIkzKRN%2BYmY5Y%2BbYJYP8xawxciAp8WDcmOGXozHad5RbxLWUioRmWOjvkkVJ%2FhRLk%2FlWgsmQIGHIJ9ZWSGQ%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eeb2f36af4ebba91d56df68a8bb2d54a969f9bb0c121f4eb83a9db43a98d85baf62af0fea7c3b92aac889ba4b76fadf1f994b280ba8daab4ec5bf2bde5a9e45289bcb9a5e24fad89b890f25f91959f99c27ce99ca2a3e55a9a97a59bca5a8ef5978edc3f9bf5aebac95394e8b882f674a1b78f91bb5d88bda3b0c654ada68882e73f92beb8add65fabb19e8ed645aaaaa58cd542edb89eadea25b089a994f05b8b9988aac9339a899da8d437e2a3’
-H ‘origin: https://music.163.com’
-H ‘priority: u=1, i’
-H ‘referer: https://music.163.com/song?id=2124731026’
-H ‘sec-ch-ua: “Chromium”;v=“124”, “Google Chrome”;v=“124”, “Not-A.Brand”;v=“99”’
-H ‘sec-ch-ua-mobile: ?0’
-H ‘sec-ch-ua-platform: “Windows”’
-H ‘sec-fetch-dest: empty’
-H ‘sec-fetch-mode: cors’
-H ‘sec-fetch-site: same-origin’
-H ‘user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36’
–data-raw ‘params=Ds0rXtYPpk8MA4nKnCpo01EhKywxrNAUnwNgVbJPGk2yhqBjOSh3ZXR6KNUFUHxdQUkIk5OV41D7VuaufA7dQMIwZqyYvLBGXDlG706sHrnDkNWyLOn7%2FXqf2mM20qeXSougbueTcL%2FKjCAr6bqHTNCXbj9wzjT6zSffWpyVNSqhE34Lqb5HInPxCkY95JZoh9%2FWcmWshmz%2BuZRd4a6xgDcHFa1tSoYuMb9bSeA%2BtE%2FHLXjVN2I%2FUUsvnCpwCwguZiDM9wvaph9ImohS0btVBF770O65%2BeyYYLohMT%2BsjQG3XOm4X7jpQpkYa8%2BBYD%2BB7sxG1SeZ5KuLTf4BpMosfLfBL0YNjqrR4qyvbaksGAg%3D&encSecKey=c620aa1d4d97688afacb8d4f2a362bcf9c2454a05bb28803688741e166c940596f47a8f395aee0095f0bf4e14dc1e894f41ac76724da4ca9ec7d27590312aaebf0c081358c371f89bdb0dfd361fe4f269f9c8663d913da4dca3cd611d5b54909e11dc68b987ddbb0574a177a23e2cec589fe1e596010bd765c62ec0c605c7922’

分析cURL命令

URL:API的URL是https://music.163.com/weapi/comment/resource/comments/get。
请求方法:POST。
Headers:包括Content-Type, Referer, User-Agent等。
Data:POST请求的数据包括params和encSecKey,这些字段通常是加密的内容。

学习如何将cURL转换为代码

通过上述的分析,可以手动将cURL命令转换为Python代码,或使用工具如Postman自动转换。
手动转换的基本方法如下(不想下软件啦):
这个代码提供了一种直接与后端API交互的方式,允许绕过前端并直接获取数据

import requests

# 设置请求URL
url = 'https://music.163.com/weapi/comment/resource/comments/get'

# POST数据
data = {
    'params': 'Ds0rXtYPpk8MA4nKnCpo01EhKywxrNAUnwNgVbJPGk2yhqBjOSh3ZXR6KNUFUHxdQUkIk5OV41D7VuaufA7dQMIwZqyYvLBGXDlG706sHrnDkNWyLOn7%2FXqf2mM20qeXSougbueTcL%2FKjCAr6bqHTNCXbj9wzjT6zSffWpyVNSqhE34Lqb5HInPxCkY95JZoh9%2FWcmWshmz%2BuZRd4a6xgDcHFa1tSoYuMb9bSeA%2BtE%2FHLXjVN2I%2FUUsvnCpwCwguZiDM9wvaph9ImohS0btVBF770O65%2BeyYYLohMT%2BsjQG3XOm4X7jpQpkYa8%2BBYD%2BB7sxG1SeZ5KuLTf4BpMosfLfBL0YNjqrR4qyvbaksGAg%3D',
    'encSecKey': 'c620aa1d4d97688afacb8d4f2a362bcf9c2454a05bb28803688741e166c940596f47a8f395aee0095f0bf4e14dc1e894f41ac76724da4ca9ec7d27590312aaebf0c081358c371f89bdb0dfd361fe4f269f9c8663d913da4dca3cd611d5b54909e11dc68b987ddbb0574a177a23e2cec589fe1e596010bd765c62ec0c605c7922'
}

# Headers
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Referer': 'https://music.163.com/song?id=2124731026',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
}

# 发送POST请求
response = requests.post(url, headers=headers, data=data)

# 打印响应内容
print(response.text)

run代码之后发现并没有返回响应内容就关闭了浏览器。Check代码,查看网页状态并打印Response:

import requests

# 设置请求URL
url = 'https://music.163.com/weapi/comment/resource/comments/get'

# POST数据
data = {
    # 'params': 'Ds0rXtYPpk8MA4nKnCpo01EhKywxrNAUnwNgVbJPGk2yhqBjOSh3ZXR6KNUFUHxdQUkIk5OV41D7VuaufA7dQMIwZqyYvLBGXDlG706sHrnDkNWyLOn7%2FXqf2mM20qeXSougbueTcL%2FKjCAr6bqHTNCXbj9wzjT6zSffWpyVNSqhE34Lqb5HInPxCkY95JZoh9%2FWcmWshmz%2BuZRd4a6xgDcHFa1tSoYuMb9bSeA%2BtE%2FHLXjVN2I%2FUUsvnCpwCwguZiDM9wvaph9ImohS0btVBF770O65%2BeyYYLohMT%2BsjQG3XOm4X7jpQpkYa8%2BBYD%2BB7sxG1SeZ5KuLTf4BpMosfLfBL0YNjqrR4qyvbaksGAg%3D',
    'params': 'fFBmt1gLBOhNPSTD1V5ywDU48JBzzykj4a6GE9V05RsTKZ4m%2FViMAnDkcP%2FSmY9dcOYxGSvfCmbsmCPanohWmYtA1Y2cBqiDJn8anCeIW0GiyaZHE2JiLIxrovXSAO%2BCr%2FLvf5Arl2A2GtYjDSYNo4B5Q28EEiYE8O%2Fz4LV%2BTWnhebdtl9atzDRvn2LSCi8jjpMMI2CYTmHyVM9F4weATo%2BybfjX9Iinzgb1lMvSOaqfouErbw6NIrsu4fxmpUmGohVoHpHxZIgzUr8fcmJg5JSwvdxpi2oO2WmqZZyqQI8Wh9CFJ0gvLsSy34l1E8w0qb6a5LplDJIBSYxHlhvTjKz%2BxRNKRD1vfC%2Fj7fDN6fc%3D',
    # 'encSecKey': 'c620aa1d4d97688afacb8d4f2a362bcf9c2454a05bb28803688741e166c940596f47a8f395aee0095f0bf4e14dc1e894f41ac76724da4ca9ec7d27590312aaebf0c081358c371f89bdb0dfd361fe4f269f9c8663d913da4dca3cd611d5b54909e11dc68b987ddbb0574a177a23e2cec589fe1e596010bd765c62ec0c605c7922'
    'encSecKey': 'b1df2fdd46fa40362dc8f7f8979ec012818655bd38c6e676497ccd1d665f49eeaecdcc81faabf715d46c890fcdc27283fb4542ce12d3fa66fc5314f5c6dcc308cb1bb843cb490774586fdab85d4e4091d61747df8cf0cbf6de8dcddbfb7c0c24a47ed1565a81820540c3392f140dddcb5319d613a9304ed6b64dd34da9ff52a0'
}

# 请求头
headers = {
    'Content-Type': 'application/json;charset=UTF-8',
    'Referer': 'https://music.163.com/song?id=2124731026',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
}

# 发送POST请求
response = requests.post(url, headers=headers, data=data)


# 打印出响应的状态码和内容
print(f"状态码: {response.status_code}")
print("响应内容:")
print(response.text)  # 显示原始响应内容,这将帮助我们理解是否接收到了预期的数据

在这里插入图片描述
发现虽然服务器返回了状态码200(表示请求已成功处理),但响应内容却是空的,可能是发送的请求中的params或encSecKey可能不正确或已过期,导致服务器没有返回任何数据。check一下cURL中的加密参数是否已经动态变动了:

第二次获取cURL(bath)发现出现不一致现象说明这些值是通过某种加密或编码方式动态生成的。在许多在线服务中,特别是涉及用户数据或需确保通信安全的场景中,经常使用这种方式来保护传输的数据,避免被窃听或篡改。

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值