문제

친구들을위한 간단한 경고 앱을 만들려고합니다.

기본적으로 Folowing Two와 같은 웹 페이지에서 데이터 "가격"및 "재고 가용성"을 추출 할 수 있기를 원합니다.

전자 메일 및 SMS 부분을 통해 경고를했지만 이제는 웹 페이지 (2 개 또는 다른 것)에서 수량과 가격을 얻을 수있어 사용 가능한 가격과 수량을 비교하고 우리를 경고 할 수 있습니다. 제품이 일부 임계 값 사이에있는 경우 주문을합니다.

나는 일부 regex를 시도했지만 (일부 튜토리얼에서 찾을 수 있지만, 이것을 위해 N00B도 너무 길을 찾았습니다),이 작업을 수행 할 수 없었습니다.

도움이 되었습니까?

해결책

$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";

다른 팁

Google을 위해 필요한 경우 화면 스크래핑이라고합니다.

대신 Dom Parser 및 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";
}

당신이하는 일 : HTML을 구문 분석하기 위해 정기적 인 표현을 사용하지 마십시오. 나쁜 일이 일어날 것입니다. a 파서 대신에.

첫째,이 질문을하는 것도 자세한 내용으로 진행됩니다. 두 번째, 웹 사이트에서 데이터를 추출하는 것은 합법적이지 않을 수 있습니다. 그러나 힌트가 있습니다.

  1. Firebug 또는 Chrome/Safari Inspector를 사용하여 HTML 컨텐츠 및 흥미로운 정보 패턴을 탐색하십시오.

  2. 성분을 테스트하여 일치하는지 확인하십시오. 여러 번 필요할 수 있습니다 (멀티 패스 구문 분석/추출)

  3. Curl 또는 훨씬 간단한 것을 통해 클라이언트를 작성하고 file_get_contents를 사용하십시오 (일부 호스팅은 file_get_contents와 함께 URL로드 URL로드를 비활성화합니다).

저에게는 Tidy를 사용하여 유효한 XHTML로 변환 한 다음 XPath를 사용하여 Regex 대신 데이터 추출물을 사용하는 것이 좋습니다. 왜요? XHTML은 규칙적이지 않고 XPath가 매우 유연하기 때문입니다. XSLT를 배울 수 있습니다.

행운을 빕니다!

당신은 아마도 HTML 코드를 DOM 파서에로드하는 것이 가장 좋습니다. 이 하나 "가격"테이블을 검색합니다. 그러나, 당신이하는 모든 종류의 긁는 것은 페이지 레이아웃을 변경할 때마다 깨질 수 있으며, 동의없이 불법 일 것입니다.

그러나 가장 좋은 방법은 사이트를 운영하는 사람들과 대화하고 대안적이고 신뢰할 수있는 데이터 전달 (웹 서비스, RSS 또는 데이터베이스 내보내기가 떠오르는 것)이 있는지 확인하는 것입니다.

웹 사이트에서 데이터를 추출하는 가장 간단한 방법입니다. 내 모든 데이터가 TAG 내에서만 덮여 있음을 분석 했으므로이 데이터를 준비했습니다.

<?php
    include(‘simple_html_dom.php’);
        // Create DOM from URL, paste your destined web url in $page 
        $page = ‘http://facebook4free.com/category/facebookstatus/amazing-facebook-status/’;
        $html = new simple_html_dom();

       //Within $html your webpage will be loaded for further operation
        $html->load_file($page);

        // Find all links
        $links = array();
        //Within find() function, I have written h3 so it will simply fetch the content from <h3> tag only. Change as per your requirement.
       foreach($html->find(‘h3′) as $element) 
        {
            $links[] = $element;
        }
        reset($links);
        //$out will be having each of HTML element content you searching for, within that web page
        foreach ($links as $out) 
        {
            echo $out;
        }                

?>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top