如何从html页面获取文本链接?

时间:2013-12-19 11:19:46

标签: php html file-get-contents

我想获得链接“http://www.w3schools.com/default.asp”&amp;来自此网页的“http://www.google.com”。我希望<a>内有<div class="link">个标记的链接,此页面中还有许多其他<a>标记,我不想要它们。我怎样才能检索特定的链接?任何人都可以帮助我吗?

<div class="link">
<a href="http://www.w3schools.com/default.asp">
<h4>W3 Schools</h4>
</a>
</div>
<div class="link">
<a href="http://www.google.com">
<h4>Google</h4>
</a>
</div>

3 个答案:

答案 0 :(得分:5)

使用诸如DOMDocument之类的DOM解析器来实现此目的:

$dom = new DOMDocument;
$dom->loadHTML($html); // $html is a string containing the HTML

foreach ($dom->getElementsByTagName('a') as $link) {
    echo $link->getAttribute('href').'<br/>';
}

输出:

http://www.w3schools.com/default.asp
http://www.google.com

Demo.


更新:如果您只想要特定<div>内的链接,可以使用XPath表达式查找div中的链接,然后循环显示它们获取href属性:

$dom = new DOMDocument;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$links_inside_div = $xpath->query("//*[contains(@class, 'link')]/a");

foreach ($links_inside_div as $link) {
    echo $link->getAttribute('href').'<br/>';
}

Demo.

答案 1 :(得分:1)

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node)
{
  echo $node->nodeValue.': '.$node->getAttribute("href")."\n";
}

答案 2 :(得分:1)

您可以使用snoopy PHP类。 Snoopy是一个模拟Web浏览器的PHP类。它自动执行检索网页内容和发布表单的任务http://sourceforge.net/projects/snoopy/

否则尝试使用Jquery

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
 <script type="text/javascript">
    $( document ).ready(function() {
         $( ".link a" ).each(function( index ) {
             var link = $( this ).attr("href") );
             alert(link );
         });
    });
</script>

您也可以使用此链接获取所有链接(javascript)

 var list = document.getElementsByTagName("a");