Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python&;机械化:如何连续浏览页面?_Python_Screen Scraping_Web Scraping_Mechanize_Mechanize Python - Fatal编程技术网

Python&;机械化:如何连续浏览页面?

Python&;机械化:如何连续浏览页面?,python,screen-scraping,web-scraping,mechanize,mechanize-python,Python,Screen Scraping,Web Scraping,Mechanize,Mechanize Python,我的问题如下: 我正试图写一个刮刀,通过一个航空票务网站的订单过程运行。因此,我想根据之前的页面结果来刮取一些页面(我希望你明白我的意思)。到目前为止,我: import mechanize, urllib, urllib2 url = 'any url' br = mechanize.Browser() br.set_handle_robots(False) br.addheaders = [('User-agent', 'Mozilla/5.0 (W

我的问题如下: 我正试图写一个刮刀,通过一个航空票务网站的订单过程运行。因此,我想根据之前的页面结果来刮取一些页面(我希望你明白我的意思)。到目前为止,我:

    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,它再次包含一个我想要修改和提交的表单,就像一个普通URL一样?只需设置

    br.open(bookingsite)

???或者是否有其他方法修改和提交输出(然后再次提交输出并接收新的输出页面)?

在初始响应后
response=br.submit()
从响应对象中选择表单:

response.select_form()
更改表单中字段的值后,请提交表单:

response.submit()

另外,如果你正在自动化预订网站,它们很可能有大量的Javascript。Mechanize不处理Javascript。我建议改为使用请求。你会很高兴的。

bookingsite
提取数据应该不是问题,但我不明白你为什么说
bookingsite
会包含一个“表单”。它应该只包含对您提交的表单的HTML响应(即
br.submit()
),您能澄清一下吗?嘿,大卫,谢谢您的回复!解释如下:第一个站点包含一个表单,您可以在其中输入起飞和到达日期、机场等详细信息,然后单击“提交”,您将进入第二个页面(预订站点),在该页面中,您可以看到在特定日期飞往所选机场的所有飞机。在第二个页面上,您需要选择一个特定的航班(现在选择以另一种形式进行,在本例中,每个航班/飞机都有单选按钮)。现在我需要选择一个并再次提交第二页以进入第三页。确定-然后您应该能够调用
response。选择表单()
并设置单选按钮,然后是
response.submit()