我正在尝试在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();">
答案 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上看到我的代码,如果您觉得可以做得更好,我欢迎任何拉取请求。