0

ウィキページの右側にあるウィキペディアの情報ボックスからコンテンツを取得しようとしています。

DOMXpathを使用してコンテンツをスクレイプしています。

このリンクの情報ボックス(右側)で、セクションをスクレイプしようとしていますTraded as。ただし、ページソースでは、複数のhrefで構成されています。

Traded as:  NASDAQ: GOOG
            NASDAQ-100 Component
            S&P 500 Component

そして、私のSIMPLE_XML_Element_Objectは次のようになります

SimpleXMLElement object {
 @attributes => array(1) (
[class] => (string)
)
 th => SimpleXMLElement object {
@attributes => array(2) (
  [scope] => (string) row
  [style] => (string) text-align:left;
)
a => (string) Traded as
}
td => SimpleXMLElement object {
@attributes => array(2) (
  [class] => (string)
  [style] => (string)
)
a => array(4) (
  [0] => (string) NASDAQ
  [1] => (string) GOOG
  [2] => (string) NASDAQ-100 Component
  [3] => (string) S&P 500 Component
)
}

これが私が中身をこすり取ろうとしたことです。

foreach ($xmlElements->xpath("//div[@id='mw-content-text']/table[@class='infobox vcard']/tr") as $node) 
{
   $name = (string)$node->th;
   if(empty($name))
     $name = (string)$node->th->a;
   if(is_array($node->td->a))
       $value = implode('~', (string) $node->td->a);
    else
       $value = (string) $node->td->a;
}

しかし、私は形成された値を取得することができず、私は単独で"NASDAQ: GOOD ~ NASDAQ-100 Component ~ NASDAQ-100 Component"値を取得しています。これは必須ではありません。"NASDAQ"

配列の場合、ノードから値を取得するにはどうすればよいですか?

私の質問がはっきりしていることを願っています。どんな助けでもいただければ幸いです。

4

2 に答える 2

1

http://www.laprbass.com/RAY_temp_user1518659.phpをご覧ください。

出力: string(64) "NASDAQ: GOOG ~ NASDAQ-100 コンポーネント ~ S&P 500 コンポーネント"

ネイティブの PHP 関数を使用するだけで、これを正しく行うのは非常に簡単です。

<?php // RAY_temp_user1518659.php
error_reporting(E_ALL);
echo '<pre>';

// ACQUIRE THE DOCUMENT
$url = 'http://en.wikipedia.org/wiki/Google';
$htm = file_get_contents($url);

// ACTIVATE THIS TO SEE THE ENTIRE DOCUMENT
// echo htmlentities($htm);

// ISOLATE THE "TRADED AS" PART
$sig = 'Traded as';
$arr = explode($sig, $htm);
$htm = $arr[1];
$sig = '</tr>';
$arr = explode($sig, $htm);
$htm = $arr[0];

// REFORMAT THE DATA INTO A TILDE-SEPARATED STRING
$new = trim(strip_tags($htm));
$new = explode(PHP_EOL, $new);
$new = implode(' ~ ', $new);

// SHOW THE WORK PRODUCT
var_dump($new);

宜しくお願いします、〜レイ

于 2012-12-23T15:06:26.180 に答える
0

配列を print_f($value) として出力して、必要なデータがあるかどうかを確認しましたか? すべての銘柄が同じパターンを持ち、「~」で内破すると、配列の最初の要素に「NASDAQ: GOOD」、2 番目の「NASDAQ-100 コンポーネント」が含まれると思います。必要なデータを取得する配列。

于 2012-12-23T14:48:09.327 に答える