0

curl と DOMDocument を使用して情報を抽出しようとしています。すべてのリンクの div レイヤーを抽出する必要があります。

しかし、私には何も表示されません。カールがなければ機能するため、わかりません。

  function media_uri_request($url, $method='', $vars='') 
  {
        $ch = curl_init();
        if ($method == 'post') 
        {
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $vars);
        }

        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_HEADER, false);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt ($ch, CURLOPT_FAILONERROR, false);
        curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
        curl_setopt ($ch, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR'], "HTTP_X_FORWARDED_FOR: ".$_SERVER['REMOTE_ADDR']));
        curl_setopt ($ch, CURLOPT_COOKIEJAR, 'tmp/cookie.txt');
        curl_setopt ($ch, CURLOPT_COOKIEFILE, 'tmp/cookie.txt');
        curl_setopt ($ch, CURLOPT_MAXREDIRS, 10);
        curl_setopt ($ch, CURLOPT_TIMEOUT, 0);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
        $buffer = curl_exec($ch);
        curl_close ($ch);

        if (isset($buffer) && filter_var($buffer, FILTER_SANITIZE_URL)) {
        $urls = Array();

        $dom = new DOMDocument();
        @$dom->loadHTMLFile($buffer);

        foreach($dom->getElementsByTagName('a') as $buffer) {
            $urls[] = Array(
                'name'  => $buffer->nodeValue,
                'href'  => $buffer->getAttribute('href'),
                'title' => $buffer->getAttribute('title'),
                'rel'   => $buffer->getAttribute('rel'),
                'id'    => $buffer->getAttribute('id'),
            );
        }
        return $urls;
    }
  }

現在、ページ上のすべてのリンクを表示していますが、divのIDが1つだけ必要で、このリンクを取得したいです。

<div id="something">
<a href="anylink">sometitle</a>
<a href="anylink">sometitle</a>
<a href="anylink">sometitle</a>
<a href="anylink">sometitle</a>
</div>

助けてください。

4

1 に答える 1

2

交換

foreach($dom->getElementsByTagName('a') as $buffer) {

foreach($dom->getElementById('something')->getElementsByTagName('a') as $buffer) {

これを行うと、最初に id で div を見つけてから、その子のリンクを検索します。詳細については、DOMDocument:: getElementById () を参照してください。

別の方法があります:

$xpath = new DOMXPath($dom);
$elements = $xpath->query("//*[@id=something]");
if ($elements->length > 0) {
    foreach ($elements->item(0)->getElementsByTagName('a') as $buffer) {

また、@$dom->loadHTML($buffer);ファイルからではなく文字列から HTML をロードします。

于 2012-10-03T22:59:01.643 に答える