如何从simpleXML_Element_Object中抓取内容?

时间:2012-12-23 14:35:52

标签: php dom xpath scrape

我正试图从任何wikipage右侧的维基百科信息框中删除内容。

我正在使用DOMXpath来抓取内容。

this链接的信息框(右侧),我正在尝试抓取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"的值,这不是必需的值。

如果它是一个数组,如何从节点获取值?

希望我对我的问题很清楚。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

请参阅http://www.laprbass.com/RAY_temp_user1518659.php

输出:字符串(64)“纳斯达克: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);

最好的问候,〜雷

答案 1 :(得分:0)

您是否尝试将数组输出为print_f($ value)以查看它是否包含您需要的数据?如果所有股票具有相同的模式并且你用“〜”内嵌它们,我相信数组的第一个元素将包含“”NASDAQ:GOOD“,第二个”NASDAQ-100组件“,所以通过输出第二个元素数组,你将获得所需的数据。