我正在尝试从 PHP 中的 Google 搜索中提取信息,并发现我可以毫无问题地阅读搜索 url,但从中获取任何内容是一个完全不同的问题。在阅读了大量帖子和适用的 PHP 文档后,我想出了以下内容
// get large panoramas of montana
$url = 'http://www.google.com/search?q=montana+panorama&tbm=isch&biw=1408&bih=409';
$html = file_get_contents($url);
// was getting tons of "entity parse" errors, so added
$html = htmlentities($html, ENT_COMPAT, 'UTF-8', true); // tried false as well
$doc = new DOMDocument();
//$doc->strictErrorChecking = false; // tried both true and false here, same result
$result = $doc->loadHTML($html);
//echo $doc->saveHTML(); this shows that the tags I'm looking for are in fact in $doc
if ($result === true)
{
var_dump($result); // prints 'true'
$tags = $doc->getElementById('center_col');
$tags = $doc->getElementsByTagName('td');
var_dump($tags); // previous 2 lines both print NULL
}
我已经通过error_log($html) 验证了我要查找的id 和标签在html 中,并且在$doc->SaveHTNL() 的解析文档中。有人看到我做错了什么吗?
编辑:
感谢大家的帮助,但我已经用 DOMDocument 碰壁了。任何文档或其他线程中的任何内容都不适用于 Google 图像查询。这是我尝试过的:
我查看了@Jon 链接,尝试了那里的所有建议,查看了 getElementByID 文档并阅读了那里的所有评论。仍然得到空的结果集。比 NULL 好,但不多。
我尝试了 xpath 技巧:
$xpath = new DOMXPath($doc);
$ccol = $xpath->query("//*[@id='center_col']");
同样的结果,一个空集。
我在读取文件后直接做了一个 error_log($html) 并且文档有一个 doctype "" 所以不是那样的。
我还在那里看到用户“carl2088”说“根据我的经验,如果您加载了 HTML 文档,getElementById 似乎可以在没有任何设置的情况下正常工作”。在谷歌图片查询的情况下,它会出现。
无奈之下,我尝试了
echo count(explode('center_col', $html))
看看是否由于某种奇怪的原因它在初始 error_log($html) 之后消失了。它肯定存在,字符串被分成 4 个块。
我检查了我在 2012 年 8 月 25 日编译的 PHP (5.3.15) 版本,所以它不是一个太旧的版本,无法支持 getElementByID。
在昨天之前,我一直在使用一系列极其丑陋的“爆炸”来获取信息,虽然它是可怕的代码,但它花了 45 分钟的时间来编写并且它有效。
我真的很想放弃我的“爆炸”黑客,但是 5 小时一无所获,而 45 分钟才能得到有效的东西,这使得以正确的方式做事真的很困难。
如果其他有使用 DOMDocument 经验的人有一些我可以尝试的额外技巧,将不胜感激。