【问题标题】:Python POST Request FailingPython POST 请求失败
【发布时间】:2012-08-14 21:36:31
【问题描述】:

我希望在此站点上发出 POST 请求:

http://web1.ncaa.org/stats/StatsSrv/careersearch

右侧的表单有四个下拉菜单。当我运行下面的代码时,顽固地没有选择“学校”。有一个隐藏的输入可能导致问题,但我无法修复它。页面上的 javascript 似乎没有效果,但我可能是错的。任何帮助表示赞赏:

#!/usr/bin/python

import urllib
import urllib2

url = 'http://web1.ncaa.org/stats/StatsSrv/careersearch'
values = {'searchOrg' : '30123','academicYear' : '2011','searchSport' : 'MBA','searchDiv' : '1'}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()

print the_page

【问题讨论】:

  • 它是怎么失败的?它会引发错误吗?退回您不期望的东西?
  • 您应该遵守网站的 robots.txt。
  • value="30123" 没有显示为选中状态,而我列出的其他值是。
  • 试试这个? stackoverflow.com/questions/10133899/…我喜欢机械化部分。 b.select_form(nr=2) 是按索引。

标签: javascript python post


【解决方案1】:

正如您所怀疑的,您缺少一个隐藏字段:doWhat = 'teamSearch'(用于提交右侧的表单)。

使用这些请求值对我有用:

values = {'doWhat':'teamSearch', 'searchOrg' : '30123','academicYear' : '2011','searchSport' : 'MBA','searchDiv' : '1'}

【讨论】:

    【解决方案2】:

    我用过机械化:

    import mechanize
    from BeautifulSoup import BeautifulSoup
    
    mech = mechanize.Browser() 
    mech.set_handle_robots(False)
    response = mech.open('http://web1.ncaa.org/stats/StatsSrv/careersearch')
    mech.select_form(nr=2)
    mech.form['searchOrg'] = ['30123']
    mech.form['academicYear'] = ['2011']
    mech.form['searchSport'] = ['MBA']
    mech.form['searchDiv'] = ['1']
    mech.submit()
    soup = BeautifulSoup(mech.response().read())
    

    我知道在 mechanize 中,该网站按顺序要求 searchOrg、academicYear、searchSport、searchDiv/列表形式。您绝对应该注意 robots.txt。

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2013-02-08
      • 2013-03-21
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 2014-06-29
      相关资源
      最近更新 更多