2016-08-04 5 views
0

거대한 데이터베이스를 쿼리하는 PHP 폼이 있습니다. 양식의 URL은 https://db.slickbox.net/venues.php입니다. 결과가 반환되기 위해 양식을 보낸 후 최대 10 분이 걸리고 결과가 동일한 페이지에 인라인으로 반환됩니다. 요청, URLLib2, LXML 및 셀레늄을 사용하여 시도했지만 이러한 라이브러리를 사용하여 솔루션을 만들 수 없습니다. 이 양식을 제출 한 후 결과의 페이지 소스를 검색하는 방법을 아는 사람이 있습니까?파이썬을 사용하여 결과를 즉시 반환하지 않는 PHP 양식을 어떻게 제출합니까?

해결책을 알고 있다면 테스트를 위해 이름 입력란 ("vname")에 마음에 오는 상점/주유소 이름을 적어주세요. 궁극적으로, 나는 또한 "checked"속성으로 체크 박스를 설정해야하지만,이 작업이 끝나면 그 다음 목표가됩니다. 고맙습니다!

+0

요청 시간이 초과 되었습니까? – Dekel

+0

어쨌든 요청 라이브러리의 경우 시간 초과가 작동하지 않습니다. 그것은 예외를 반환하기 전에 기다릴 최대 시간을 설정합니다. 문제는 이러한 라이브러리 중 하나를 사용하여 코드를 실행하면 즉시 실행해서는 안되는 결과를 반환합니다. – DaJoNel

답변

0

나는 보통 이런 종류의 일을하기 위해 Curl에 의존합니다. 단추를 사용하여 양식을 보내 소스를 검색하는 대신 요청 페이지에서 직접 응답 페이지로 전화하십시오. 저는 PHP에서 일하기 때문에 이렇게하기가 쉽습니다. 파이썬에서는 같은 것을 관리하기 위해 pycURL이 필요합니다.

이렇게해야 할 일은 POST method with Curl을 사용하여 throw 된 좋은 인수 값으로 venues.php를 호출하는 것입니다.

이렇게하면 요청 (국가 코드, 고양이 이름)을 준비해야하지만 확인란을 선택하거나 브라우저에서 웹 사이트 페이지를로드 할 필요가 없습니다.

set_ini(max_execution_time,1200) // wait 20 minutes before quitting 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "https://db.slickbox.net/venues.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

// prepare arguments for the form 
$data = array('adlock ' => 1, 'age' => 0,'country' => 145,'imgcnt'=>0, 'lock'=>0,'regex'=>1,'submit'=>'Search','vname'=>'test'); 

//add arguments to our request 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
//launch request 
if(! $result = curl_exec($ch)) 
{ 
    trigger_error(curl_error($ch)); 
} 
echo $result; 
+0

어쨌든 나는 이것을 사용할 웹 인터페이스에 그것을 빌드 할 수 있기 때문에 PHP를 단지 사용하고 있습니다. Curl에 대해 잘 알고 있지는 않지만 사용하고자하는 코드의 실체적인 예를 제공 할 수 있습니까? 그렇지 않다면 괜찮습니다. 내일 더 연구 할 수 있습니다. Curl은 응답을 위해 10 분을 기다려야한다고 걱정하지 않습니까? 팁 고마워! – DaJoNel

+0

테스트되지 않은 샘플 코드가 추가되었습니다. 시간 제한에 대해서는 PHP 최대 실행 시간에 의해 컬이 제한 될 수 있습니다. ini_set 함수로 스크립트를 변경할 수 있습니다. – technico

+0

그게 효과가; 대단히 감사합니다! 나는 항상 PHP를 고맙게 여기고 있으며 이것이 얼마나 멋진가를 더욱 굳건히합니다. 확실히 PycURL을 살펴볼 것입니다 (제 목적을 위해 Python을 사용하여 자동화하는 것이 더 쉽습니다). 그러나 이것은 훌륭한 출발입니다! – DaJoNel

0

어때 대략 ghost?

from ghost import Ghost 
ghost = Ghost() 

with ghost.start() as session: 
    page, extra_resources = session.open("https://db.slickbox.net/venues.php", wait_onload_event=True) 
    ghost.set_field_value("input[name=vname]", "....") 
    # Any other values 
    page.fire_on('form', 'submit') 
    page, resources = ghost.wait_for_page_loaded() 

    content = session.content # or page.content I forgot which 

당신이 HTML을 구문 분석 BeautifulSoup로 사용하거나 유령이 할 몇 가지 기본적인 유틸리티가있을 수 있습니다 후.

관련 문제