PHP 网页抓取

新手上路,请多包涵

我正在寻找一种方法来从用户在 PHP 中给出的 URL 对另一个页面进行小的预览。

我只想检索页面的标题、图像(如网站的徽标)和一些文本或描述(如果可用)。没有任何外部库/类,有没有简单的方法可以做到这一点?谢谢

到目前为止,我已经尝试使用 DOCDocument 类,加载 HTML 并将其显示在屏幕上,但我认为这不是正确的方法

原文由 federico-t 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 360
2 个回答

我建议你为此考虑 simple_html_dom 。这将使它变得非常容易。

这是一个如何提取标题和第一张图片的工作示例。

 <?php
require 'simple_html_dom.php';

$html = file_get_html('http://www.google.com/');
$title = $html->find('title', 0);
$image = $html->find('img', 0);

echo $title->plaintext."<br>\n";
echo $image->src;
?>

这是第二个示例,它在没有外部库的情况下执行相同的操作。我应该注意到在 HTML 上使用正则表达式不是一个好主意。

 <?php
$data = file_get_contents('http://www.google.com/');

preg_match('/<title>([^<]+)<\/title>/i', $data, $matches);
$title = $matches[1];

preg_match('/<img[^>]*src=[\'"]([^\'"]+)[\'"][^>]*>/i', $data, $matches);
$img = $matches[1];

echo $title."<br>\n";
echo $img;
?>

原文由 Jordan Mack 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用这些库中的任何一个。如您所知,每一种都有利弊,因此您可以查阅有关每一种的注释或花时间自己尝试:

  • Guzzle :一个独立的 HTTP 客户端,因此不需要依赖于 cURL、SOAP 或 REST。
  • Goutte :由 Symfony 开发人员基于 Guzzle 和一些 Symfony 组件构建。
  • hQuery :具有缓存功能的快速抓取工具。抓取大型文档的高性能。
  • Requests :以其用户友好的使用而闻名。
  • Buzz :轻量级客户端,非常适合初学者。
  • ReactPHP :异步抓取工具,具有全面的教程和示例。

您最好检查所有这些,并在最适合的场合使用每个人。

原文由 behkod 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题