javascript - 如何在 Python 3 中使用请求从使用 JavaScript 和 jQuery 的网站获取数据

标签 javascript python web-scraping python-requests client-side

我已经在 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=eVD9j36Ke941519520481168

我需要哪些来创建请求?

最佳答案

只需使用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/

相关文章:

javascript - 如何使自动完成 Jquery UI 插件动态化

javascript - 如何在 anchor 标签中调用 AJAX 函数

python - snakemake:规则的可选输入

python - 使用 ItemLoader 但在 Scrapy 中添加 XPath、值等

javascript - 使用 Selenium 和 python 抓取 javascript 生成的内容时出现问题

javascript - 仅使用 Jquery 跳转到页面的各个部分

javascript 如何定义内部函数

python - 在带参数的函数中使用 timeit 模块

Python:在单个模块文件中搜索全局类

python - 如何使用 <span> 标签获取 <li> 中的每个值 BeautifulSoup