如何使用PHP提取网页中的单个link?
How to exctract a single link in a webpage using PHP?
我正在寻找一种使用 PHP.
从特定网页中仅提取一个 URL 的解决方案
这是我需要的一个简单示例:
- 我有一个 URL 有很多 link (https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details)
- 我想从当前页面抓取锚
click here
下的 link。
- 那么代码必须return这个结果
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
.
我试过这个:
$sourceURL="https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details";
$htmlSource=htmlentities(file_get_contents($sourceURL));
echo strip_tags($htmlSource, "<a>");
我得到了所有 link 的结果,包括我需要的
我需要你的帮助来提取我想要的 link 中的 href value
。
提前致谢。
如果您查看所需的 URL,您可以看到它在每个 Click Here URL
的开头都有一个模式 https://download.apkpure.com
,因此,我们可以使用正则表达式来查找它。
preg_match_all
将 return 匹配我们正则表达式的字符串数组。然后我使用 implode 将第一个索引转换为字符串。
这是完整的工作代码:
$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]);
最优雅的方法是使用 DOM 解析器。
- 迭代锚点
- 检查锚ID是否为'download_link'(在'click here'link中)
- 提取href属性值
$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;
我正在寻找一种使用 PHP.
从特定网页中仅提取一个 URL 的解决方案这是我需要的一个简单示例:
- 我有一个 URL 有很多 link (https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details)
- 我想从当前页面抓取锚
click here
下的 link。 - 那么代码必须return这个结果
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
.
我试过这个:
$sourceURL="https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details";
$htmlSource=htmlentities(file_get_contents($sourceURL));
echo strip_tags($htmlSource, "<a>");
我得到了所有 link 的结果,包括我需要的
我需要你的帮助来提取我想要的 link 中的 href value
。
提前致谢。
如果您查看所需的 URL,您可以看到它在每个 Click Here URL
的开头都有一个模式 https://download.apkpure.com
,因此,我们可以使用正则表达式来查找它。
preg_match_all
将 return 匹配我们正则表达式的字符串数组。然后我使用 implode 将第一个索引转换为字符串。
这是完整的工作代码:
$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]);
最优雅的方法是使用 DOM 解析器。
- 迭代锚点
- 检查锚ID是否为'download_link'(在'click here'link中)
- 提取href属性值
$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;