我正在尝试抓取一个只是链接的html页面,我需要找到所有标题链接并找到它可能有的任何图像,例如新闻网站将有一个标题。
//scenario 1
<h2><a href="link-to-page">myHeading</a></h2> //image as sibling
<a href="link-to-page"><img src="img.jpg" /></a>
//scenario 2
<h2><a href="link-to-page">myHeading
<img src="img.jpg" />
</a></h2> // image as child
我可以使用
将图像作为孩子处理$array=$html->find('h2 a');
foreach($array['h2'] as $h2{
$heading[]=array('link'=>$h2->href, 'text'=>$h2->plaintext, 'img'=>$h2->find('img',0));
echo $heading[$i]['link'].'<br />';
echo $heading[$i]['text'].'<br />';
echo $heading[$i]['img'].'<br />';
}
//of course this will be layout out differntly but at the moment just trying to get the image
上述代码仅在图片是&#39; H2&#39;的直接子项时才有效。标签,在某些情况下,图像将是一个兄弟姐妹,在这种情况下,我不知道如何处理。我已经尝试过next_sibling(),但我似乎无法让这个工作,有没有人有任何关于如何处理这种情况的建议,其中和图像不是父标签的子,而是兄弟。也许我的方法需要重新思考。我要做的是找到与标题相关的图像,它可以是2个场景中的1个,链接的孩子或兄弟
提前谢谢
答案 0 :(得分:0)
include_once "simple_html_dom.php";
$url = "index.html";
$html = file_get_html($url);
foreach ($html->find("h2") as $h){
foreach ($h->find("a") as $a){
echo $a->href ."<br />";
$img = $a->find("img",0);
echo $img->src ."<br />";
}
}
答案 1 :(得分:0)
使用DOMDocument
,这是可能的。如果您需要搜索每个可能的有效标题标记:h1, h2, h3, h4, h5, h6
,那么这一切都可以在一个循环中完成。找到标题标记后,我们将使用该节点作为根节点开始搜索其他必需的标记。
$dom = new DOMDocument('');
// prevents PHP from warning us that header, footer are invalid tags.
@$dom->loadHTMLFile($url);
$links = array();
$images = array();
for($i = 1; $i <= 6; $i++) {
$heading_level = (string)$i;
$heading = 'h' . $heading_level;
foreach($dom->getElementsByTagName($heading) as $h) {
foreach($h->getElementsByTagName('a') as $link) {
array_push($links, array(
"href" => $link->getAttribute('href'),
"innerHTML" => $link->nodeValue
));
}
foreach($h->getElementsByTagName('img') as $img) {
array_push($images, array(
"src" => $img->getAttribute('src')
));
}
}
}