m0_43450539
2021-04-17 23:05
采纳率: 100%
浏览 140

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)
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 浴火_凤凰 2021-04-18 02:07
    已采纳

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

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

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

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

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

    已采纳该答案
    1 打赏 评论
  • 应该是爬错页面了吧,该页面应该是通过其他地址调用后再显示的。

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

    1 打赏 评论
  • weixin_45115418 2021-04-18 14:01

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

    1 打赏 评论
  • 有问必答小助手 2021-04-19 11:46

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

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

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

    打赏 评论
  • 有问必答小助手 2021-04-20 13:31

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

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

    打赏 评论

相关推荐 更多相似问题