我已经在 Python 3 中使用 requests 库有一段时间了,并决定创建一个测试程序。对于此程序,我使用网站 https://ytmp3.cc/举个例子。但事实证明,在客户端似乎发生了很多事情。
正在生成一些 key 和其他内容,我一直在使用 Firefox 的内置网络监视器来找出正在发出的请求,但运气不佳。
据我所知,请求库无法通过发出更多请求来保持“页面”打开并修改 DOM 和内容。
任何人都可以看一下,并对特殊 key 是如何生成的以及我如何根据自己的请求获得这些 key 做出合格的猜测。
Fx加载网页时,发出的第一个请求是针对根的,响应包含网页HTML。我注意到在底部有一个包含一些键和数字的网址。
<script id="cs" src="js/converter-1.0.js?o=7_1a-a&=_1519520467"></script>
id 7_1a-a
number _1519520467`
这用于发出下一个请求,但随后会发出许多后续请求,并且还会发出一些其他键。但我找不到这些来自哪里,因为它们不是由请求返回的。
我知道当插入 YouTube 链接时,将会向 URL 发出请求,如下所示。
https://d.ymcdn.cc/check.php?callback=jQuery33107639361236859977_1519520481166&v=eVD9j36Ke94&f=mp3&k=7_1a-a&_=1519520481168
这将返回以下内容:
jQuery33107639361236859977_1519520481166({"sid":"21","hash":"2a6b2475b059101480f7f16f2dde67ac","title":"M\u00d8 - Kamikaze (官方视频)","ce":1,"错误” :""})
由此我可以使用上面的哈希构建下载网址:
https://yyd.ymcdn.cc/+ 2a6b2475b059101480f7f16f2dde67ac(哈希)+/eVD9j36Ke94
(youtube 视频 ID)
但是我怎样才能得到
jQuery33107639361236859977_1519520481166&v=eVD9j36Ke94
和 1519520481168
我需要哪些来创建请求?
最佳答案
只需使用youtube-dl
,您和该网站的运营商就可以避免很多麻烦。 ,特别是使用 --extract-audio --audio-format mp3
选项。这可能是该网站本身使用的。
youtube-dl
是用 Python 编写的,可以 easily be used programatically .
如果您出于某种原因坚持向该网站发送请求,我会这样做:
callback=jQuery33107639361236859977_1519520481166
指定 JSONP 请求的回调名称。您提供的任何姓名都将被打印出来。例如,传递callback=foo
将产生以下响应:foo({...})
您可以完全省略它,在这种情况下服务器将仅提供 JSON 响应,这很好。
_=1519520481168
只是为了防止响应被缓存。它是随机生成的,就像上面的参数一样。但是,该网站会检查是否存在,因此您至少必须传递一些内容。与许多网站一样,该网站会检查有效的
Referer
header 。
下面是向该网站发出请求的最小 cURL 命令行:
curl 'https://d.ymcdn.cc/check.php?v=eVD9j36Ke94&f=mp3&k=aZa4__&_=1' -H 'Referer: https://ytmp3.cc/'
关于javascript - 如何在 Python 3 中使用请求从使用 JavaScript 和 jQuery 的网站获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48969332/