2014-12-05 1 views
-2

나는이 웹 페이지의 콘텐츠를 스크랩하기 위해 노력하고있어 :긁어 내용

www.motorcyclemonster.com/motorcycle-events.html, 내가 사용하고 코드 것은 :

<?php 

    $content = file_get_contents('http://www.motorcyclemonster.com/motorcycle-events.html'); 

    $pattern = '#<tr.">\r\n<td>(.*)</td>\r\n<td>(.*)</td>#'; 

    preg_match_all ($pattern, $content, $data); 

    var_dump($data); 

    for ($i = 0; $i < 11; $i++) 
    { 
     echo "<br /><br />". $data[2][$i].' '.$data[3][$i]; 
    } 

?> 

난 그냥 다음

<tr> 
    <td width="23%" bgcolor="#76C2FA">Nov 15 - Jan 4</td> 
    <td width="52%" bgcolor="#76C2FA"><b> <a href="/events/cars-and-christmas-2014-11-15-Hershey-PA.html" title="Cars and Christmas - Hershey, Pennsylvania">Cars and Christmas</a></b></td> 
    <td width="20%" bgcolor="#76C2FA">Hershey</td> 
    <td width="5%" bgcolor="#76C2FA">PA</td> 
</tr> 

에서 정보를 당길 수 있기를하고

에 대한 몇 가지 변수를 설정할 수있을 것입니다
<tr> 
    <td width="23%" bgcolor="#76C2FA">**$date**</td> 
    <td width="52%" bgcolor="#76C2FA"><b><a href=**$page_url**" title="**$title**">$title</a></b></td> 
    <td width="20%" bgcolor="#76C2FA">**$city**</td> 
    <td width="5%" bgcolor="#76C2FA">**$state**</td> 
</tr> 

어떤 도움을 정규 표현식으로 감사

답변

0

구문 분석 HTML 태그 (이유의 넓은 범위에 대한) 그런 좋은 생각이 아니다 것입니다. 오히려 그러한 목적으로 특별히 수행 된 것처럼 PHP DOM을 확인하는 것이 좋습니다.

0

PHP Simple HTML Dom Parser

<?php 
/** 
* Created by PhpStorm. 
* User: Adrian 
* Date: 05/12/2014 
* Time: 19:28 
*/ 
//Load website 

include('simple_html_dom.php'); 
$html = file_get_html('http://www.motorcyclemonster.com/motorcycle-events.html'); 

//For each table row 
$events = array(); 
foreach($html->find('table',2)->find('tr') as $h){ 
    $temp = array(); 
    //get date 
    $temp['date'] = $h->find('td', 0)->innertext; //Inner contents of first cell 

    if($url = $h->find('td', 1)) { 
     if($url = $url->find('a', 0)) {//First link of second cell 
      $temp['url'] = $url->href; //href attribute 
      $temp['url_title'] = $url->title; //title attribute 
      $temp['title'] = $url->innertext; // Inner content of link 

      $temp['town'] = $h->find('td', 2)->innertext; 
      $temp['state'] = $h->find('td', 3)->innertext; 

      $events[] = $temp; 
     } 
    } 
} 

print_r($events); 

주를 사용하는 가장 쉬운 방법 : 먼저 단순 HTML 돔 파서를 포함 할 필요가

당신은 당신을 그것을 그러나 표시,이 이벤트의 배열을 반복 할 수 있습니다 소원

일반적으로 전체 웹 사이트의 첫 번째 페이지 또는 2 페이지 만 제공하고 전체 소스 웹 사이트에 대한 링크를 제공합니다.

+0

ok , 그래서 나는 Simple HTML Dom Parser를 가지고 있고 include ("simple_html_dom.dom.php")를 추가했다; 하지만 그것을 실행할 때 지금 오류가 발생합니다. 치명적 오류 : /home/loadsr/public_html/scrape/scrap.php 15 번째 줄에있는 비 객체의 find() 멤버 함수 호출 – TrevTech

+0

죄송합니다. , 아마 처음에 http : //가 필요합니까? 수정 된 버전을 사용해 보시겠습니까? –

+0

LOL, 예, 이제는 새로운 오류 메시지가 나타납니다. 치명적 오류 : 행 15에있는 /home/loadsr/public_html/scrape/scrap.php에있는 개체가 아닌 개체의 find() 함수를 호출하십시오. – TrevTech