[英]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.