【问题标题】:How to exctract a single link in a webpage using PHP?如何使用 PHP 提取网页中的单个链接?
【发布时间】:2020-11-28 11:20:42
【问题描述】:

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

这是我需要的一个简单示例:

  1. 我有一个包含许多链接的 URL (https://apkpure.com/mi-home/com.xiaomi.smarthome/download?from=details)
  2. 我想从当前页面抓取锚点click here下的链接。
  3. 那么代码必须返回这个结果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>");

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

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

提前致谢。

【问题讨论】:

    标签: php regex html-parsing scrape


    【解决方案1】:

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

    preg_match_all 将返回与我们的正则表达式匹配的字符串数组。然后我使用 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]);
    

    【讨论】:

      【解决方案2】:

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

      • 遍历锚点
      • 检查锚 ID 是否为“download_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;
      

      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

      【讨论】:

      • 感谢您的回答。它完全符合我的要求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2019-04-12
      • 2023-03-18
      • 2022-06-15
      • 2011-07-04
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多