2

내 문제는 다음과 같습니다. 항공사 발권 웹 사이트의 주문 프로세스를 통과하는 스크레이퍼를 작성하려고합니다. 그래서 저는 이전에 페이지의 결과에 의존하는 두 페이지를 긁어 내고 싶습니다. 여기파이썬 및 기계화 : 연속으로 페이지를 긁어 모으는 방법?

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() 

그리고 내 문제 : 지금까지 지금의 난 그냥 정상적인 URL처럼, 내가 다시 수정하고 제출하려는 양식을 포함하는 변수 bookingsite를 사용할 수 있습니까? 설정에 의해서만

br.open(bookingsite) 

??? 아니면 출력을 수정하고 제출하는 또 다른 방법이있을 것입니다 (그리고 출력을 다시 제출하고 새로운 출력 페이지를받습니다)?

+0

'bookingsite'에서 데이터를 추출하는 것은 문제가되지 않지만 'bookingsite'에 '양식'이 포함되어 있다고 말하는 이유를 이해할 수 없습니다. 제출 한 양식에 HTML 응답을 포함해야합니다 (예 :''''''). – David

+0

안녕하세요, 데이비드, 답장을 보내 주셔서 감사합니다. 여기에 설명이 있습니다. 첫 번째 사이트에는 출발 및 도착 날짜, 공항 등 세부 정보를 입력하는 양식이 들어 있으며 제출을 클릭하면 모든 비행기를 볼 수있는 두 번째 페이지 (bookingsite)가 나타납니다. 선택한 날짜에 선택한 공항으로 비행하십시오. 이 두 번째 페이지에서 특정 비행을 선택해야합니다 (이제이 선택은 다른 형태로 발생합니다.이 경우 각 비행/비행기에 대한 라디오 버튼이 있습니다). 이제 하나를 선택하고이 두 번째 페이지를 다시 제출하여 세 번째 페이지로 이동해야합니다. – julianschnell

+0

Ok - 그러면'response.select_form()'을 호출하고 라디오 버튼과'response.submit()'을 설정할 수 있습니다. – David

답변

0

초기 응답은 응답 객체에서 양식을 선택 response = br.submit() 후 :

response.submit() 

추신 : 당신이 양식을 제출 양식 내의 필드의 값을 변경하고 후

response.select_form() 

예약 사이트를 자동화하는 경우 Javascript가 많을 가능성이 큽니다. Mechanize는 Javascript를 처리하지 않습니다. 요청을 대신 사용하는 것이 좋습니다. 당신은 당신이 행복해 할 것입니다.

관련 문제