【发布时间】:2015-06-15 15:54:22
【问题描述】:
我正在为一个项目构建一个自定义刮板。我目前可以抓取网页上的所有链接,将 HREF 和锚文本存储在数据库中。但是,在尝试确定锚元素是否包含图像元素时,我遇到了困难。
这是我的代码:
foreach($rows as $row) {
$url = $row['url'];
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE); //disable libxml errors
$dom->loadHTML(file_get_contents($url));
// Write source page, destination URL and anchor text to the database
foreach($dom->getElementsByTagName('a') as $link) {
$href = $link->getAttribute('href');
$anchor = $link->nodeValue;
$img = $link->getElementsByTagName('img');
$imgalt = $img->getAttribute('alt');
然后我将数据写入数据库。这在 $img 和 $imgalt 中工作正常,但我真的想确定锚是否包含图像以及是否有 alt 属性。我知道问题是我如何尝试使用 getElementsByTagName 选择图像。我整天都在谷歌上搜索并尝试了很多不同的建议,但似乎没有任何效果。这甚至可能吗?
我已按照here 中提到的说明进行操作。
有一些进展。我可以在锚元素中回显图像的 HTML(如果我只是 echoDOMinnerHTML($link)),但我仍然无法获得 alt 属性。我不断收到“在非对象上调用成员函数 getAttribute()”。
这是我现在的代码:
foreach($dom->getElementsByTagName('a') as $link) {
$href = $link->getAttribute('href');
$anchor = $link->nodeValue;
$imgdom = DOMinnerHTML($link);
$imgalt = $imgdom->getAttribute('alt');
if(isset($imgalt)){
echo $imgalt;
}
【问题讨论】:
-
不清楚你在问什么。如果您可以在链接下获取图像,那么您可以确定该链接也包含图像。
-
嗨@felipsmartins。如果我的问题不清楚,请道歉。基本上,我正在抓取网页上的所有链接,然后将 HREF 和锚文本存储到数据库中。但是,我还想检查是否有任何链接包含图像元素。它正在弄清楚他们是否有给我带来麻烦的图像元素。
-
我认为@felipsmartins 的回答是正确的方法
标签: php dom domdocument getelementsbytagname getattribute