2013-03-06 2 views
0

를 사용하여 HTML의 일부를 얻으려면 어떻게해야합니까 IMG URL을 얻을 필요가이는 PHP 간단한 HTML DOM

<div id="1"> 
    <div id="2"> 
    <div id="3"> 
     <div id="4"> 
     <div id="5"> 
      <div id="photo">  
      <a id="photo" href="link"> 
       <img width="200" src="http://site.com/photo.jpg"> 
      </a> 
      </div> 
      <div id="info"></div> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 

같은 구조로 HTML 페이지를 (http://site.com/...)

내 코드 :

include('simple_html_dom.php'); 

// Create a DOM object from a URL 
$html = file_get_html('http://site.com/123'); 


// find all div tags with id=gbar 
foreach($html->find('img[width="200"]') as $e) 
    echo $e->src . '<br>'; 

하지만이 사이트에서는 작동하지 않습니다.
이미지 URL을 얻는 또 다른 방법이있을 수 있습니다

+0

당신이 동일한 ID를 가진 두 개의 요소를 가질 수 없습니다. 먼저 수정하십시오. –

+0

@SaurabhSinha - 의미 론적으로 사실이지만 단순한 html-dom은 단순한 파일을 구문 분석하고 단순히 첫 번째 항목을 반환 할 것이라고 생각하지 않습니다. – Emissary

+0

OP : 어떤 사이트입니까? 스크립트가 제공되는 HTML이 제공되는 HTML과 동일하다는 것을 확신하십니까? 즉. 'file_get_html' (네가 생각하기에) 네이티브'files_get_contents'를 사용합니다. 그러면 헤더가없는 원시 요청을 보냅니다. 예를 들어 페이스 북의 좋아하는 것들은 사용자 에이전트가 지정되지 않은 상태에서 여러분이 기대하는 내용을주지 않을 것입니다. '$ html을 에코 (echo $ html)'할 수 있고 이것이 당신이 기대하는 구조인지 다시 확인할 수 있습니까? – Emissary

답변

0

기대되는대로 사이트는 User-Agent에 따라 다른 콘텐츠를 제공하여 "브라우저 용"버전을 원한다는 것을 서버에 알려주는 HTML을 가져옵니다. 예를 들어 당신이이 줄을 제거 할 수 있습니다 :

$html = file_get_html('http://vk.com/durov'); 

을 ... 그리고 이런 식으로 뭔가로 대체 :

$context = stream_context_create(array('http' => array(
    'header' => 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17' 
))); 
$html = str_get_html(file_get_contents('http://vk.com/durov', false, $context)); 

내가 사용자 에이전트 스푸핑의 관행이 일반적으로 눈살을 찌푸리게되는 점에 유의해야하며, 문제의 사이트에 대해이가있다 - 사이트가 로봇이보고 싶어 소스 코드를 표시합니다

<?php 
    header('Content-type: text/plain'); 
    echo file_get_contents('http://siteurl.com'); 

가 : 정보가 정장 귀하의 요구 사항을 포함하는 경우는 아마도 볼이 실행해야 경량 버전의 페이지 - 귀하의 관점에서 보면 처리 시간이 적습니다.

+0

빈 결과를 얻을 –

+0

@ user2054164 확실히 작동 친구 - 난 그냥 [이] (http://pastebin.com/2p6qAcBQ)를 실행했습니다 http : // cs7003.vk.me/v7003685/1ddd/jZ8LZcwYN20.jpg' \ [[link] (http://cs7003.vk.me/v7003685/1ddd/jZ8LZcwYN20.jpg) \] – Emissary

+0

한 줄을 인쇄했습니다. 당신은 맞다 나는 나가 필요로하는 꼬리표없는 경량 페이지를 얻는다, 나가 빈 결과를 얻는 thats. 원하는 결과를 얻는 방법입니까? –

0

$html->find('img[width=200]')200 주위에 따옴표없이 입력해야합니다.

+0

시도해보십시오, 작동하지 않습니다 –

+0

@ user2054164 당신의 예제는'200' 주위의 따옴표로조차 잘 동작합니다. '$ html = file_get_html ('http://site.com/123'); 다음에'print_r ($ html)'을 삽입 할 수 있습니까? –

+0

비어 있습니다, 사이트 vk.com/durov 같은 vk.com 사용자의 메인 페이지입니다 –

0

당신은 예를 들어, 그것을 찾기 위해 정규 표현식을 사용할 수

<?php 
$string = ' 
<div id="1"> 
    <div id="2"> 
    <div id="3"> 
     <div id="4"> 
     <div id="5"> 
      <div id="photo">  
      <a id="photo" href="link"> 
       <img width="200" src="http://site.com/photo.jpg"> 
      </a> 
      </div> 
      <div id="info"></div> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> '; 

$pattern = '/http[^""]+/'; 
preg_match($pattern, $string, $matches); 
print_r($matches); 

인쇄 :

Array 
(
    [0] => http://site.com/photo.jpg 
) 
+0

URL을 페이지 URL로 변경하는 방법 –

+0

$ string = file_get_contents ('http://www.example.com/'); – Oli