【问题标题】:Making a post request when there are no attributes in the form element?当表单元素中没有属性时发出发布请求?
【发布时间】:2015-02-13 21:53:04
【问题描述】:

我正在遍历邮政编码并从该站点http://www.airnow.gov/index.cfm?action=school_flag_program.sfp_createwidget检索信息

这是表单和输入元素:

<form name="groovyform">
<input type="text" name="Title" id="Title" size="20" maxlength="20" />
<input type="text" name="Zipcode" id="Zipcode" size="10" maxlength="10" />

我的问题是,如果表单元素中没有属性(例如actionmethod),我该如何进行发布请求?

我的代码(我尝试使用 request.getparams 参数,以及 request.postdata 参数):

url = 'http://www.airnow.gov/index.cfm?action=school_flag_program.sfp_createwidget'
data_to_send = {'zipcode ':'37217',
                'Title': 'ph'}
response = requests.get(url, params=data_to_send)
contents = response.text
print contents

只返回url 的HTML,但我想要发布data 时获得的页面的HTML。换句话说,我不认为request.get 正在提交我的数据,我认为这与没有actionmethod 属性有关。

启发我!

谢谢!

【问题讨论】:

    标签: python html forms web-scraping python-requests


    【解决方案1】:

    该表单不适合在任何地方提交。它只是为了Copy 按钮的好处:

    <input type="button" value="Copy" onclick="copy(document.groovyform.simba.value)" />
    

    buildCall Javascript 函数中也有许多对document.groovyform 的引用,当您单击Build your widget 时会运行该函数。

    这是一种老式的 Javascript 编程方式。现在,大多数人会为这些元素分配 ID,并使用document.getElementById() 来访问它们,因此无需将它们包装在表单中。但在开发该方法之前,访问 DOM 元素的方式取决于表单作为document 的属性自动添加的事实,而输入元素是包含表单的属性。

    【讨论】:

      【解决方案2】:

      阅读理解,我能学会。

      【讨论】:

      • 您没有阅读整篇文章吗?特别是这部分:“我已经尝试使用 params 参数的 request.get 和使用 data 参数的 request.post。”
      • 不,我没有看到,主要是因为您发出 POST 请求有点愚蠢,而您提供的代码都是 GET 请求。对我来说没有任何意义。为什么不使用相关代码(即使用 request.post)和您获得的响应来编辑您的帖子,而不仅仅是告诉我们“返回一些 HTML”
      • 根据我的研究,您并不总是使用 post 功能“发布”数据。例如,请参阅stackoverflow.com/questions/10557475/send-post-request-python。这取决于method 属性。
      • 这里的表单中根本没有method属性,那为什么还要默认GET呢?无论哪种方式,这都不相关,其他评论有正确答案。
      • @LawrenceDeanVanderpool 仅供参考,默认方法是GET
      【解决方案3】:

      好的,就像 Barmar 所说,我发布的 &lt;form&gt; 不应该提交。我应该填写的表格(页面顶部)包含以下内容:

      <form name="frmZipSearch" method="get" style="width:178px; float:left;">
       Zip Code:
      <input name="zipcode" type="text" size="5"  maxlength="5" height="20">
      

      现在我的代码可以工作了。

      url = 'http://www.airnow.gov/index.cfm?action=airnow.local_city&zipcode=37217&submit=Go'
      data_to_send = {'zipcode':'37217'}
      response = requests.get(url, data=data_to_send)
      contents = response.text
      print contents
      

      感谢 Barmar,将我引向正确的道路。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 2021-08-06
        • 2012-12-24
        • 1970-01-01
        相关资源
        最近更新 更多