0

我正在使用 Python 的requests模块,并向站点发送 GET 请求,如下所示:

r = requests.get("https://www.youtube.com", params={"search_query":"Hello World"}).text

它只返回 YouTube 上搜索“Hello World”的页面的 HTML,这是名称为“search_query”的字段的参数。

但是,假设我要输入的一个参数在站点上没有名称,但仍然是表单的一部分。

我正在谈论的网站具有以下代码:

<input type="text" id="youtube-url" value="http://www.youtube.com/watch?v=KMU0tzLwhBE" onclick="sALL(this)" autocomplete="off" style="width:466px;">

考虑到它没有名称,我将如何向该特定输入发送参数?

谢谢

编辑:代码的完整 HTML:

在此处输入图像描述

4

1 回答 1

1

这个网站不做任何正常的提交,一切都是通过javascript完成的。当您按下按钮时,会发送一个 GET 请求,如下所示:

"/a/pushItem/?item=" + escape(g("youtube-url").value)
   + "&el=na&bf=" + getBF()
   + "&r="+ (new Date()).getTime();

然后根据这个结果,发送另一个:

"/a/itemInfo/?video_id=" + video_id + "&ac=www&t=grp&r=" + a.getTime();

所以在python中你可以试试这个:

import time

videoid = requests.get("http://www.youtube-mp3.org/a/pushItem/",
                 params={
                      "item": "your youtube video url",
                      "el": "na",
                      "bf": "false",
                      "r": int(time.time() * 1000000)   # JS timestamps are in microseconds
                 }).text


info = requests.get("http://www.youtube-mp3.org/a/itemInfo/",
                   params={
                       "video_id": videoid,
                       "ac": "www",
                       "t": "grp",
                       "r": int(time.time() * 1000000)
                   }).text

然后你必须解析info,它甚至不是 JSON,而是更多的 javascript,然后对这些数据做任何你想做的事情。

您可能必须处理验证码或转换进度。

于 2013-07-07T18:43:12.790 回答