2011-01-04 4 views
2

나는 정보를 수집해야하는 약 2000 개의 제품이 있기 때문에 magento 사이트를 긁어 내려고 노력하고 있습니다. 나는 거의 모든 것을 위해 화면 스크레이퍼를 작성하는 것으로는 완전히 괜찮지 만 큰 문제가 발생했습니다. 나는 get_file_content를 사용하여 제품 페이지의 html을 수집합니다.PHP Magento Screen Scraping

문제는 :

당신은 제품 페이지를 보려면 로그인해야합니다. 그 표준 magento 로그인, 그래서 어떻게 내 화면 스크레이퍼 에이 라운드 얻을 수 있습니까? 나는 전체 스크립트를 요구하지 않고 방법에 대한 조언만을 제공한다.

+0

그것은 불법입니다. 그들에게 적절한 형식의 가격표를 보내달라고 요청하십시오. – zerkms

+1

그건 불법이 아닙니다. 귀하가 제공 한 사용권, t + c 또는 컨텐츠 작성자의 명시적인 허가를 포함하여 귀하가 제공 한 법적 권한 및 출처에 전적으로 좌우됩니다. 스크린 스크래핑은 제품 업데이트를 자동화하는 방법입니다. 어쨌든 고마워. – gunwin

+0

화면 긁기를 허용하는 서비스 약관을 볼 수 있도록 사이트에 대한 URL을 제공 할 수 있습니까? – zerkms

답변

2

stream_context_create을 사용하면 file_get_contents으로 전화 할 때 보낼 헤더를 지정할 수 있습니다.

내가 제안하는 것은 브라우저를 열고 사이트에 로그인하는 것입니다. Firebug (또는 좋아하는 쿠키 뷰어)를 열고 쿠키를 잡고 요청에 따라 보내십시오.

편집 :

<?php 
// Create a stream 
$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" 
) 
); 

$context = stream_context_create($opts); 

// Open the file using the HTTP headers set above 
$file = file_get_contents('http://www.example.com/', false, $context); 
?> 

편집 (2) : 여기 PHP.net에서 예제이 질문의 범위를 벗어난,하지만 당신이 웹 사이트를 긁어하는 방법을 궁금해하는 경우 이후에 당신은 볼 수 있었다 방법은 DOMDocument::loadHTML입니다. 필요한 기능을 제공하기 위해 필수 기능 (예 : XPath query, getElementsByTagName, getElementsById)이 제공됩니다.

무언가를 단순하게 다듬 으려면 preg_match_all으로 RegEx를 사용할 수도 있습니다.

+0

매우 유용합니다. 나는 페이지를 파싱하기 위해 preg_match를 사용하고있다. 너의 별! – gunwin

+0

저는 방금 로그인이 어떻게 작동하는지 잠시 보았습니다 만, 세션 변수를 사용하여 로그인이 등록되면 어떻게 될까요? – gunwin

+0

Magento에서 세션을 사용하는 경우 세션 ID (대부분의 경우)는 쿠키 PHPSESSID에 저장됩니다. 그래서 기본적으로''header '=> "Cookie : PHPSESSID = ... \ r \ n"'를 입력하면 로그인해야합니다.세션이 만료 될 수 있으므로 오랜 기간 동안 긁고 있다면 결국 쿠키를 업데이트해야 할 수도 있습니다. –

0

CURL에 익숙하다면 하루에 비교적 간단해야합니다. 은행에 로그인하여 데이터를 검색하는 유사한 앱을 만들었습니다. 물론 인증이 필요한 앱도 있습니다. 당신이 정규식과 결과에 대한 해석 할 수있는 페이지의 출력을 잡을 수 있다면

http://coderscult.com/php/php-curl/2008/05/20/php-curl-cookies-example/

: 아래

인증 목적을 위해 쿠키와 CURL을 사용하는 방법의 예와 링크입니다. 양자 택일로, 당신은 당신을 위해이 일을하는 스누피와 같은 클래스를 사용할 수 있습니다 :

http://sourceforge.net/projects/snoopy/