0

このような構造のhtmlページがあります

<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> 

img url を取得する必要があります ( 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を取得する別の方法があるかもしれません

4

3 に答える 3

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) );

User-Agentのなりすましの慣行は一般的に眉をひそめていることに注意する必要があります。おそらくこれを実行して、含まれている情報がニーズに合っているかどうかを確認する必要があります。

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

これは、サイトがボットに見せたいソースコードを表示します-問題のサイトの場合、これはページの軽量バージョンです-あなたの観点からは、処理にかかる時間が短くなります。

于 2013-03-06T10:38:54.083 に答える
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
)
于 2013-03-06T10:52:21.857 に答える