首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PHP删除网页中的单个链接?

如何使用PHP删除网页中的单个链接?
EN

Stack Overflow用户
提问于 2020-08-08 08:34:43
回答 2查看 46关注 0票数 0

我正在寻找一个解决方案,只提取一个URL从一个特定的网页使用PHP。

下面是我需要的一个简单的例子:

我有一个包含多个链接的URL (https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details)

  • I想要从当前页面中抓取锚click here下的链接。

  • 然后代码必须返回这个结果https://download.apkpure.com/b/XAPK/Y29tLnhpYW9taS5zbWFydGhvbWVfNjMwNjdfYWU1M2FmOWU?_fn=TWkgSG9tZV92NS44LjdfYXBrcHVyZS5jb20ueGFwaw&as=4c5e64f6f957edac834f3631fe4e09715f2e35f6&ai=-1070628217&at=1596863870&_sa=ai%2Cat&k=24cb20f95fbf333deb01c145ce7b982b5f30d87e&_p=Y29tLnhpYW9taS5zbWFydGhvbWU&c=1%7CLIFESTYLE%7CZGV2PVhpYW9taSUyMEluYy4mdD14YXBrJnM9MTI5OTAzMTM4JnZuPTUuOC43JnZjPTYzMDY3.

我试过这个:

代码语言:javascript
运行
复制
$sourceURL="https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details";
$htmlSource=htmlentities(file_get_contents($sourceURL));

echo strip_tags($htmlSource, "<a>");

我得到了所有链接的结果,包括我需要的链接

我需要你的帮助来提取我想要的链接的href value

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-08 09:30:59

最优雅的方法是使用DOM解析器。

  • 通过锚点迭代
  • 检查锚ID是否为“download_link”(在“单击此处”链接中)
  • 提取href属性值

代码语言:javascript
运行
复制
$html = file_get_contents('https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details');

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

$href = '';
foreach($doc->getElementsByTagName('a') as $item) {
    if($item->getAttribute('id') == 'download_link') {
        $href = $item->getAttribute('href');
        break;
    }
}

echo $href;

https://download.apkpure.com/b/XAPK/Y29tLnhpYW9taS5zbWFydGhvbWVfNjMwNjdfYWU1M2FmOWU?_fn=TWkgSG9tZV92NS44LjdfYXBrcHVyZS5jb20ueGFwaw&as=6a7de2cb660007a32e4b3d61a0d3c41e5f2e7102&ai=1946881098&at=1596878986&_sa=ai%2Cat&k=9e912b1007d50d2be9af8e78bcdea86c5f31138a&_p=Y29tLnhpYW9taS5zbWFydGhvbWU&c=1%7CLIFESTYLE%7CZGV2PVhpYW9taSUyMEluYy4mdD14YXBrJnM9MTI5OTAzMTM4JnZuPTUuOC43JnZjPTYzMDY3

票数 1
EN

Stack Overflow用户

发布于 2020-08-08 09:27:46

如果您查看所需的URL,您可以看到它在每个https://download.apkpure.com的开头都有一个模式Click Here URL,因此,我们可以使用regex查找它。

preg_match_all将返回与正则表达式匹配的字符串数组。然后,我使用内爆将第一个索引转换为字符串。

以下是完整的工作代码:

代码语言:javascript
运行
复制
$sourceURL="https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details";
$content=file_get_contents($sourceURL);
$content = strip_tags($content,"<a>");
preg_match_all('#\bhttps?://download.apkpure.com[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $content, $match);
echo implode(', ', $match[0]);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63313340

复制
相关文章

相似问题

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