簡體   English   中英

使用python提交帶有liburl或請求的Web表單

[英]Using python to submit a web form with liburl or requests

我正在嘗試在網頁上提交表單,並在提交表單后訪問下一頁的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()

當我在請求后得到頁面時,這是在兩種方法上都具有表單的頁面。 我想知道是否可能需要使用“提交”按鈕做某事? 我是Web和python的新手,所以任何提示或想法都將不勝感激。 謝謝!

這是提交按鈕的html:

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

該頁面上的表單實際上將由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()

表單的目標URL是https://fcq.colorado.edu/scripts/broker.exe (請參見<form>標記的action屬性)。 因此,您需要替換:

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

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

我不知道您是否仍然感興趣,但是實際上我對完全相同的站點做了類似的操作,並且不得不處理完全相同的問題。 我使用Mechanize and Requests庫來構建各種Python scraper API。

您可以在github上看到我的代碼,如果您覺得自己可以做得更好,歡迎任何請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM