Requests 返回结果的目标内容是js

小白尝试使用requests获取网易云音乐ID的时候发现问题,网址如下。

https://music.163.com/#/discover/toplist

在网站上看出id就在a标签的href属性里,浏览器中显示的是当前音乐的id,如下图。

但是问题出现了,在pyc中调用requests.get获取网页html。在html中寻找需要的音乐id

得到的html里音乐ID是${song.id}

请问是什么情况?

代码就以下四行

import requests
url = "https://music.163.com/#/discover/toplist"
res = requests.get(url)
print(res.text)

你的截图的结果是JS代码执行之后的结果,那个只做参考 不能作为爬虫的结果

爬虫requests获取的结果是你右键-查看网页源代码 里面看到的内容 也 是没有执行JS的结果

如果你想获取那个数据,2个方法:

1.使用selenium等可以操作浏览器的类库 打开浏览器去抓取

2.自己分析你需要的数据是在哪个JS文件中,然后使用requests爬取那个JS文件获取你要的数据

应该是爬错页面了吧,该页面应该是通过其他地址调用后再显示的。

这个id是通过js读取外部json数据来动态更新的。
requests只能获取网页的静态源代码,动态更新的取不到,
对于动态更新的要用selenium 的 webdriver 爬取。 
或者是找真正json数据的地址进行爬取。

哈哈 我之前也碰到过 后来经过高人指点 把url中的 “#”去掉就好了  我直接也想不明白为啥

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y