我试图通过XPath获取bing搜索结果。这是我的代码:
$html = file_get_contents("http://www.bing.com/search?q=bacon&first=11");
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHtml($html);
$x = new DOMXpath($doc);
$output = array();
// just grab the urls for now
foreach ($x->query("//li[@class='b_algo']") as $node)
{
//$output[] = $node->getAttribute("href");
$tmpDom = new DOMDocument();
$tmpDom->loadHTML($node);
$tmpDP = new DOMXPath($tmpDom);
echo $tmpDP->query("//div[@class='b_title']//h2//a//href");
}
return $output;
这个foreach遍历所有结果,我想要做的就是从$node
foreach
中提取链接和文本,但因为$node
本身就是一个对象我可以&#39 ; t从中创建DOMDocument
。我怎么查询呢?
答案 0 :(得分:1)
首先,您的XPath表达式尝试匹配不存在的href
子元素,查询属性的@href
。
您无需创建任何新的DOMDocument
,只需将$node
作为上下文项传递:
foreach ($x->query("//li[@class='b_algo']") as $node)
{
var_dump( $x->query("./div[@class='b_title']//h2//a//@href", $node)->item(0) );
}
如果您只对网址感兴趣,也可以直接查询:
foreach ($x->query("//li[@class='b_algo']/div[@class='b_title']/h2/a/@href") as $node)
{
var_dump($node);
}