2012-06-28 2 views
-3

페이지에서 모든 IMDB id를 가져 오는 방법은 무엇입니까? 예를 들어, 모든 ID를 here에서 가져 오려고합니다.페이지 URL의 모든 imdb id를 preg_match_all로 얻으십시오.

http://www.imdb.com/title/tt0948470/ 

내가 preg_match_all()를 사용하여 페이지의 모든 ID를 얻을 필요가 - 어느 날 도울 수 : 해당 페이지에서 URL은 형식의입니까?

+1

질문을 형식화하는 데 더 많은 노력을 기울이십시오. 가능한 한 쉽게 읽을 수 있도록 Markdown을 사용하고 가능하면 영문 철자 검사기 (파이어 폭스에서 이것은 편집 상자에 표준으로 제공됨). – halfer

답변

1

좋아, 조리 업 코드를주는거야,하지만 나는 또한 그것을 설명 :

  1. 는 HTML 소스
  2. 구문 분석의 모든 <a>href 자신의 값의 경우 정규 표현식으로
  3. 테스트 속성을 얻습니다 성냥.
  4. 일치하는 경우 링크에서 ID를 추출하고 중복되지 않도록 저장하십시오.
  5. 완료.

예/(참고

// initialize 
$ids = array(); 
$url = 'http://www.imdb.com/movies-coming-soon/'; # this URL 
$expr = '//a/@href';        # these attributes 
$regex = '(/title/(tt\d{5,7})/)u';     # matching this regex 
$match = 1;           # take group 1 

// process 
foreach((new DOMXpath(@DOMDocument::loadHTMLFile($url)))->query($expr) as $obj) 
    preg_match($regex, $obj->value, $matches) 
     && $ids[$matches[$match]] = 0; 
    ; 
$ids = array_keys($ids); 

// output 
print_r($ids); 

Demo : 당신은이 질문 PHP5 태그는, 현재의 안정적인 PHP5 그래서이 예제는 5.4이며, 당신은 컬 래퍼와 PHP5 버전을 구성하는 경우이 코드는 curl입니다)

편집 :. 낮은 PHP 버전 :

... 
// process 
$xp = new DOMXpath(@DOMDocument::loadHTMLFile($url)); 
foreach($xp->query($expr) as $obj) 
... 

Edit2 : IMDB 태그를 마크 업하는 것만으로 태그가 표시되므로 해당 페이지의 제목 링크가 아닌 해당 목록의 실제 영화 항목을 검색 할 수 있습니다.

이렇게하려면 사용되는 xpath 표현이 약간 향상되어야합니다. 이제 구문 분석이 훨씬 지능적이기 때문에 중복이 없으므로 중복 항목이 없어야하므로이를 제거 할 필요가 없습니다.

+0

구문 분석 오류 : 예기치 않은 구문 오류 T_OBJECT_OPERATOR 12 내 PHP 버전이 지원되지 않는다고 생각합니다. –

+0

@M Sona : 어느 것이 있습니까? 어쨌든, 내가 만든 PHP 버전을 사용하고 있지 않다면 편집해야한다. – hakre

+0

안녕하세요 지금 고맙습니다. 내 PHP 버전은 5.3.13입니다. –

1

좋아요. 나는 조리 된 코드를 제공하지 않습니다.

href="/title/tt1615065/" 

가 지금은 정규식을 구축 할 사소한한다 : 파이어 폭스의 "보기 선택 소스"의 간단한 함수 나 각 링크 형식으로 HREF 속성이 봐 가지고 있습니다. 나는 당신을 좋은 RegEx tutorial 제안하고 욕심 많은 성냥이 일을 할 것이다. 행운을 빕니다!

관련 문제