2010-01-07 8 views
7

일부 친구에게 간단한 경고 응용 프로그램을 만들려고합니다.PHP를 통해 웹 사이트에서 데이터 추출

는 기본적으로 나는 folowing이 같은 웹 페이지에서 데이터 "가격"과 "재고"를 추출 할 수 있도록하려면 : 내가 만든

전자 메일 및 SMS 부분을 통해 경고하지만 지금은 수량 및 가격을 웹 페이지 (그 2 또는 다른 모든 제품)에서 가져올 수 있으므로 사용 가능한 가격과 수량을 비교하고 주문하도록 경고 할 수 있습니다. 제품이 일부 사이에있는 경우 임계 값.

일부 정규식 (일부 자습서에서 발견되었지만이 방법도 n00b)을 시도했지만이 유용한 팁이나 예제를 얻을 수 없었습니다.

+1

당신은 지금까지 시도한 것을 게시 할 수 있습니다 .... –

+1

** 정규 표현식을 사용하여 HTML을 구문 분석하지 마십시오 **. 정규식으로 HTML을 안정적으로 구문 분석 할 수는 없으며 슬픔과 좌절을 당할 것입니다. HTML이 예상과 다르게 변경되면 코드가 손상됩니다. 이미 작성, 테스트 및 디버깅 된 PHP 모듈을 사용하여 HTML을 올바르게 구문 분석하는 방법에 대한 예제는 http://htmlparsing.com/php를 참조하십시오. –

답변

29
$content = file_get_contents('http://www.sparkfun.com/commerce/product_info.php?products_id=9279'); 

preg_match('#<tr><th>(.*)</th> <td><b>price</b></td></tr>#', $content, $match); 
$price = $match[1]; 

preg_match('#<input type="hidden" name="quantity_on_hand" value="(.*?)">#', $content, $match); 
$in_stock = $match[1]; 

echo "Price: $price - Availability: $in_stock\n"; 
+0

첫눈에 매력처럼 작동 thsi은 내가 찾고있는 간단한 솔루션입니다 !!! 덕분에 많이 – Mike

+0

텍스트의 제품 이름 및 기타 정보를 쉽게 수정할 수 있습니다 .... 와우 10 배 많이, 내 말은 ... 그것은 단순한 방법으로 많은 간단한 웹 사이트에서 의미있는 데이터를 가져 오는 것입니다. – Mike

+1

환영합니다 :) 특정 요구 사항이있는 경우 정규 표현식을 사용하면 HTML 페이지의 데이터를 완벽하게 마이닝 할 수 있습니다. 페이지의 구조가 변경되면 중단되지만 파서를 기반으로하는 솔루션도 변경됩니다. –

5

당신이 한 일 : 정규식을 사용하여 HTML 또는 bad things will happen을 구문 분석하지 마십시오. 대신 parser을 사용하십시오.

+0

정규 표현식은 매우 구체적인 사용 사례 (즉, 마크 업/텍스트는 항상 동일합니다.)에 적합하다고 생각합니다. 물론 HTML 등의 유효성 검사를위한 것이 아닙니다. 파서는 항상 좋은 해결책이지만 때로는 과잉입니다. –

+0

나는 페이지에서 2 개의 정보를 추출하려고하기 때문에 정규식이 여기있을 것이라고 생각했다. 형식은 꽤 표준 적이다 ... – Mike

+1

@Felix HTML을 구문 분석하려고하면 어떻게 될지에 대한 그래픽 설명을 읽었습니까? 정규 표현식. 매우 대담하다면, 내 대답의 첫 번째 링크를 클릭하십시오. –

2

this one과 같은 DOM 구문 분석기에 HTML 코드를로드하고 "가격 책정"테이블을 검색하는 것이 가장 좋습니다. 그러나, 귀하가하는 모든 종류의 긁기는 페이지 레이아웃을 변경할 때마다 중단 될 수 있으며 동의 없이는 불법입니다.

가장 좋은 방법은 사이트를 운영하는 사람들과 이야기하고 대체 가능한 안정적인 형태의 데이터 전달 (웹 서비스, RSS 또는 데이터베이스 내보내기가 마음에 듭니다)이 있는지 확인하는 것입니다.

+0

나는 매시간 웹 사이트를 통해 스크립트를 볼 수 있도록 나와 내 친구에게만이 작업을 수행하려고합니다. 그들은 현재 어떤 웹 서비스도 지원하지 않습니다. 데이터베이스 수출 ... 하하, 나는 정말로 그렇게 생각하지 않는다. – Mike

+0

"불법?" 진지하게 ..? –

+0

예. 많은 사이트에서는 서비스 약관에 따라 사이트의 콘텐츠를 자동으로 찾아보기/다운로드/구문 분석하는 것을 금지합니다. 많은 관할 지역에서이 방법이 시행되고 시행 될 수 있습니다. 이 경우에는 문제가있을 것 같지 않지만 항상주의 할만한 가치가 있습니다. –

2

첫 번째 질문은이 질문에 너무 자세히 나와 있습니다. 둘째, 웹 사이트에서 데이터를 추출하는 것이 합법적이지 않을 수 있습니다. 경기 수 있는지 확인하려면 정규식을 테스트 흥미로운 정보

  • 의 HTML 내용과 패턴을 탐구하는

    1. 사용 방화범 또는 크롬/사파리 관리자 : 그러나, 나는 힌트를 가지고있다. 당신은 file_get_contents 사용

    2. 컬 또는 훨씬 간단 통해 클라이언트를 쓰기 그것을 여러 번 (멀티 패스 구문 분석/추출) 할 필요가 있습니다 (참고 그 file_get_contents 일부 호스팅하지 않도록 적재 된 URL)

    필자는 Tidy를 사용하여 올바른 XHTML로 변환 한 다음 RegEx 대신 데이터를 추출하는 데 XPath를 사용하는 것이 좋습니다. 왜? XHTML은 규칙적이지 않으며 XPath는 매우 유연하기 때문입니다. 변환 할 XSLT를 배울 수 있습니다.

    행운을 빈다.

  • 7

    google을 위해 스크린 스크래핑이라고합니다.

    대신 dom 파서와 xpath 표현식을 사용하는 것이 좋습니다. HtmlTidy를 통해 먼저 HTML을 피드하여 유효한 마크 업인지 확인하십시오.예를 들어

    :

    $html = file_get_contents("http://www.example.com"); 
    $html = tidy_repair_string($html); 
    $doc = new DomDocument(); 
    $doc->loadHtml($html); 
    $xpath = new DomXPath($doc); 
    // Now query the document: 
    foreach ($xpath->query('//table[@class="pricing"]/th') as $node) { 
        echo $node, "\n"; 
    } 
    
    +2

    오직 분별있는 것을 추천하는 +1 - 파서. – Tomalak

    +4

    자동차는 일반 여행을위한 최선의 선택이지만, 이웃을 방문 할 필요가 있다면 간단한 산책으로 충분할 수 있습니다. –

    0

    가장 간단한 방법은, 웹 사이트로부터 데이터를 추출한다. 내 모든 데이터가 태그 내에 만 포함되어 있으므로이 태그를 준비했습니다.

    관련 문제