2017-05-15 1 views
0

게시 요청을 사용하여 스크레이퍼를 생성합니다. 실행할 때 아무것도 얻지 않습니다. 내가 뭘 잘못하고 있는지 이해할 수 없어. 크롬 개발자 도구를 사용하여 양식 데이터 쿼리를 볼 때 콘솔에 전체 문자열을 붙여 넣은 경우 이상하게 보였으므로 그 이유를 간결하게 설명했습니다. 모든 제안은 매우 감사하겠습니다. formdata에 대한POST 요청을받은 스크래퍼가 결과를 가져 오지 않습니다.

import requests 
from lxml import html 

url = "http://www.golf.co.nz/PlayGolf/ClubDirectory.aspx" 

def grab_data(address): 
    payload={"ctl00$MainContent$cbRegion":"All Regions","ctl00$MainContent$cbHoleOpt":"Any number of Holes"} 
    headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'} 
    response = requests.post(address, data=payload, headers = headers) 
    tree=html.fromstring(response.text) 
    names=tree.xpath("//td[@class='align-left']//h2/text()") 
    for name in names: 
     print(name) 

grab_data(url) 

요소 :

<div id="MainContent_pnlForm" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'MainContent_btnSearch')"> 


           <div id="MainContent_pnlFilters"> 

             <div> 
              <select name="ctl00$MainContent$cbRegion" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$cbRegion\',\'\')', 0)" id="MainContent_cbRegion" class="ddl-filter"> 
      <option selected="selected" value="0">All Regions</option> 
      <option value="1">Aorangi Region</option> 
      <option value="2">Auckland Region</option> 
      <option value="3">Bay of Plenty Region</option> 
      <option value="5">Canterbury Region</option> 
      <option value="6">Hawkes Bay Region</option> 
      <option value="7">Manawatu/Wanganui Region</option> 
      <option value="10">North Harbour Region</option> 
      <option value="11">Northland Region</option> 
      <option value="12">Otago Region</option> 
      <option value="13">Poverty Bay/E. Coast Region</option> 
      <option value="14">Southland Region</option> 
      <option value="15">Taranaki Region</option> 
      <option value="9">Tasman Region</option> 
      <option value="16">Waikato Region</option> 
      <option value="17">Wellington Region</option> 

     </select> 

              <select name="ctl00$MainContent$cbHoleOpt" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MainContent$cbHoleOpt\',\'\')', 0)" id="MainContent_cbHoleOpt" class="ddl-filter"> 
      <option selected="selected" value="0">Any number of Holes</option> 
      <option value="9">9 Holes</option> 
      <option value="18">18 Holes</option> 
      <option value="27">27 Holes</option> 
      <option value="36">36 Holes</option> 

     </select> 


              <input name="ctl00$MainContent$tbSearch" type="text" value="SEARCH" size="10" id="tbSearch"> 

              <input type="submit" name="ctl00$MainContent$btnSearch" value="GO" id="MainContent_btnSearch" class="module-button-cta submit-filter"> 
             </div> 

    </div> 

</div> 
+0

이것은 구문 분석 후 얻을 수 있습니다. 여기에서 진행할 수 없습니다. >>> 트리 html.fromstring = (response.content) >>> 트리 >>> tree.text '\ R \ n' –

답변

0

솔루션을 발견. formdata 매개 변수는 정확하게 크롬 개발자 도구가 표시하는 것으로 설정해야합니다. 여기에 내 대답을 게시하려고했으나 몸이 30000을 허용하는 반면 완전히 만족 된 formdata는 75000자를 넘기 때문에 불가능합니다.

관련 문제