【问题标题】:How to enter a parameter for a HTTP GET request that doesn't have a name?如何为没有名称的 HTTP GET 请求输入参数?
【发布时间】:2013-07-07 18:19:22
【问题描述】:

我正在使用 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:

【问题讨论】:

  • 如果输入没有名称,则不与表单一起提交。 javascript做什么?也许它使用ids 作为名称?
  • 我对 Javascript 不太了解,但它看起来不像它使用 id 作为基于站点 HTML 的名称 (youtube-mp3.org)
  • 提交表单并查看检查器的“网络”选项卡中发生的情况,您可以准确查看提交的内容和方式。
  • 我看过那里,但我仍然在苦苦挣扎:我不清楚该网站如何提交输入

标签: python parameters get request


【解决方案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,然后对这些数据做任何您想做的事情。

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

【讨论】:

  • 只有一个问题:“解析信息”是什么意思
  • 你会得到一个这样的字符串:info = { "title" : "Developers", "image" : "http://i.ytimg.com/vi/KMU0tzLwhbE/default.jpg", "length" : "3", "status" : "serving", "progress_speed" : "", "progress" : "", "ads" : "", "pf" : "", "h" : "b89796b7f81990b00f3352c80227f6cb" };,你必须从中提取有用的信息。
  • 主要是h位。下载链接由您之前获得的视频 ID 和 h 构建。
  • 哦,伙计,这令人困惑:不过,谢谢,我会尽力弄清楚,并在我这样做时接受您的回答
  • 尝试跟随javascript;转到 Sources 选项卡,选择 client.js 并按底部工具栏中的 {} 对其进行格式化。按下按钮时调用btnSubmitClickpushItem 发送第一个请求,infoRehash 发送第二个请求,checkInfo 使用数据(例如构建下载链接)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
相关资源
最近更新 更多