使用python提交带有liburl或请求的Web表单

时间:2014-04-15 21:10:57

标签: python html forms python-requests

我正在尝试在webpage上提交表单,并在提交表单后转到下一页的html。我发现了两种使用请求或liburl的方法。

import urllib
import urllib2
import webbrowser

url = 'https://fcq.colorado.edu/UCBdata.htm'

def main():
    data = urllib.urlencode({'subj': 'CSCI', 'crse': '1300'})
    results = urllib2.urlopen(url, data)
    print results.read()
    with open("results.html", "w") as f:
        f.write(results.read())

    webbrowser.open("results.html")
    return 0

 if __name__ == '__main__':
    main()

或:

import requests

url = 'https://fcq.colorado.edu/UCBdata.htm'

def main():     
    payload = {'subj': 'CSCI', 'crse': '1300'}
    r = requests.post(url, payload)
    with open("requests_results.html", "w") as f:
        f.write(r.content)  
    return 0

if __name__ == '__main__':
    main()

当我在请求之后获取页面时,它就是两个方法上具有表单的页面。我想知道我是否可能不得不使用提交按钮做某事?我是网络内容和python的新手,所以任何提示或想法将不胜感激。谢谢!

这是提交按钮的html:

<input type="submit" name="sub" value="Submit Request" onclick="this.disabled=true,this.form.submit();">

3 个答案:

答案 0 :(得分:2)

该页面上的表单实际上将由JavaScript提交,因此仅查看<form />元素(不一定)就足够了。你可以用例如提交表单后,Firebug的网络标签或Chrome开发者工具会检查POST请求,以查看实际提交的内容。

这似乎有效:

import requests

url = 'https://fcq.colorado.edu/scripts/broker.exe'

payload = {
    "_PROGRAM": "fcqlib.fcqdata.sas",
    "_SERVICE": "fcq",
    "camp": "BD",
    "fileFrmt": "HTM",
    "ftrm": "1",
    "fyr": "2007",
    "grp1": "ALL",
    "jjj": "mytst",
    "ltrm": "7",
    "lyr": "2013",
    "sort": "descending YEARTERM SUBJECT COURSE SECTION",
}

payload.update({
    'subj': 'CSCI',
    'crse': '1300',
})


def main():
    r = requests.post(url, payload)
    with open("requests_results.html", "w") as f:
        f.write(r.content)
    return 0

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

表单的目标网址为https://fcq.colorado.edu/scripts/broker.exe(请参阅<form>标记的操作属性)。所以你需要替换:

url = 'https://fcq.colorado.edu/UCBdata.htm'

url = 'https://fcq.colorado.edu/scripts/broker.exe'

答案 2 :(得分:0)

我不知道你是否仍然感兴趣,但我实际上做了类似于完全相同的网站,并且必须处理完全相同的问题。我使用Mechanize和Requests库来构建各种Python scraper API。

您可以在github上看到我的代码,如果您觉得可以做得更好,我欢迎任何拉取请求。