首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从页面抓取所有链接

从页面抓取所有链接
EN

Stack Overflow用户
提问于 2013-12-22 11:48:51
回答 4查看 385关注 0票数 2

我想从一个页面抓取所有链接(href)。

这是我的实际代码:

代码语言:javascript
复制
preg_match_all('/href=.([^"\' ]+)/i', $content, $anchor);

但它只获取域和子域(如name.name.exname.ex),但不获取自定义URL(如name.ex/name/name.php )。

有谁能帮忙处理正则表达式吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-22 14:49:29

我建议不要为此使用正则表达式。我建议您使用DOM来解析和获取结果。

下面是一个使用DOMXPath的示例

代码语言:javascript
复制
$html = '<a href="name.ex/name/name.php">text</a>
         <a href="foo.com">foobar</a>';

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

$xpath = new DOMXPath($doc);

foreach ($xpath->query('//a') as $link) {
   $links[] = $link->getAttribute('href');
}

print_r($links);

请参阅Working demo

票数 3
EN

Stack Overflow用户

发布于 2013-12-22 17:13:19

使用DOMDocument更容易:

代码语言:javascript
复制
$doc = new DOMDocument();
@$doc->loadHTML($html);

$linkNodes = $doc->getElementsByTagName('a');

foreach($linkNodes as $linkNode) {
    $urls[] = $linkNode->getAttribute('href');
}

print_r($urls);
票数 1
EN

Stack Overflow用户

发布于 2013-12-22 12:25:30

试试这个正则表达式:

代码语言:javascript
复制
$pattern = "/href="([^\s"]+)/";
preg_match_all($pattern, $content, $matches);

if (count($matches[1]) {
  foreach($matches[1] as $match)
    echo $match . "<br />";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20729060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档