我试图从PHP中的Google搜索中提取信息,并发现我可以毫无问题地读取搜索urls,但是从它们中获取任何信息都是一个完全不同的问题。在阅读了大量的文章和适用的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
}我已经验证了我正在寻找的in和标记在error_log($html)的html中,以及在$ doc ->SaveHTNL()解析的文档中。有人看到我做错什么了吗?
编辑:
谢谢你的帮助,但我已经和DOMDocument碰壁了。任何文档或其他线程中的任何内容都不适用于Google图像查询。以下是我尝试过的:
我查看了@Jon,尝试了那里的所有建议,查看了getElementByID文档,并阅读了所有评论。仍然得到空的结果集。总比零好,但不多。
我尝试了xpath技巧:
$xpath = new DOMXPath($doc);
$ccol = $xpath->query("//*[@id='center_col']");同样的结果,一个空集。
我在文件读取后直接执行了一个error_log($html)操作,文档有一个doctype "“,所以不是这样的。
我还看到用户"carl2088“说”根据我的经验,如果您已经加载了一个getElementById文档,那么在没有任何设置的情况下,getElementById似乎工作得很好“。而在谷歌图像查询的情况下,它会出现。
绝望中,我试着
echo count(explode('center_col', $html)) 看看是否由于某种奇怪的原因,它在初始error_log($html)之后消失了。它肯定在那里,字符串被分成4块。
我检查了我的PHP版本(5.3.15)是2012年8月25日编写的,所以它并不是支持getElementByID的太旧版本。
昨天之前,我用了一个非常丑陋的“爆炸”系列来获取信息,虽然这是一段可怕的代码,但它花了45分钟才写出来,而且很有效。
我真的很想放弃我的“爆炸”黑客,但是5小时的时间实现不了什么比45分钟得到一些有用的东西,使它真的很难做正确的方式。
如果有使用DOMDocument经验的其他人有一些额外的技巧我可以尝试,这将是非常感谢的。
发布于 2012-10-18 11:43:28
如果是的话,您是否使用javascript getElementById和getElementsByTagName?
$tags = $doc->getElementById('center_col');
$tags = $doc->getElementsByTagName('td');发布于 2012-10-18 12:41:52
在使用函数DOMDocument->validate()之前,需要使用DOMDocument->validateOnParse或$doc->getElementById('center_col');验证文档。
$doc->validateOnParse = true;
$doc->loadHTML($html);stackoverflow: getelementbyid-problem
http://php.net/manual/de/domdocument.getelementbyid.php
这是在问题中@乔恩的帖子在他的评论!
https://stackoverflow.com/questions/12953802
复制相似问题