2
我的问题如下: 我正在尝试编写一个通过航空公司票务网站订购流程的刮板。所以我想抓几页,这取决于页面的结果之前(我希望你明白我的意思)。我至今现在:Python&机械化:如何在连续的页面上刮取页面?
import mechanize, urllib, urllib2
url = 'any url'
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11')]
br.open(url)
response = br.response().read()
br.select_form(nr=1)
br.form.set_all_readonly(False)
## now I am reading out the variables of form(nr=1)
for control in br.form.controls:
if not control.name:
print " - (type) =", (control.type)
continue
print " - (name, type, value) =", (control.name, control.type, br[control.name])
## now I am modifying the variables
br['fromdate'] = '2012/11/03'
br['todate'] = '2012/11/07'
## now I am submitting the form and saving the output in the variable bookingsite
response = br.submit()
bookingsite = response.read()
这里是我的问题:我如何使用变量bookingsite,这又包含了我要修改并提交形式,就像一个正常的网址是什么?只需设定
br.open(bookingsite)
???还是有另一种修改和提交输出的方法(然后再次提交输出并接收新的输出页面)?
从'bookingsite'提取数据不应该是一个问题,但我不明白你为什么说'bookingsite'会包含一个“表单”。它应该只包含对你提交的表单的HTML响应(即'br.submit()')你能澄清一下吗? – David
嘿大卫,谢谢你的回复!这里是解释:第一个网站包含一个表格,在这里你可以输入诸如出发和到达日期,机场等详细信息,然后点击提交,你会看到第二页(预订),你可以看到所有飞机在特定日期飞往您选择的机场。在第二页上,您需要选择一个特定的航班(现在该选择以另一种形式出现,在这种情况下,每个航班/飞机都有单选按钮)。现在我需要选择一个,然后再次提交第二个页面以进入第三个页面。 – julianschnell
好的 - 那么你应该可以调用'response.select_form()'并设置单选按钮,接着是'response.submit()'。 – David