PHP 中的网页抓取

2022-08-30 12:23:48

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

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

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


答案 1

我建议您为此考虑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;
?>

答案 2

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

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

你最好检查它们,并在最好的场合使用每个人。


推荐