详细步骤教学:使用PHP进行网页抓取

本文详细介绍了如何使用PHP进行网页抓取。首先解释了选择PHP的原因,接着阐述了开始使用PHP的基础知识,然后通过三个步骤教授如何进行网页抓取:收集网站代码、解析网页和实现循环抓取。示例代码展示了如何提取和解析网页内容,最后对整个过程进行了总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

了解如何从头开始使用 PHP 轻松创建和编写您自己的简单网络抓取工具。

PHP(HyPertext PreProcessor超文本预处理器)是一种用于网络开发的脚本语言,可用于收集网络数据。在这篇文章中,我们将介绍:

  • 为什么使用PHP

  • 开始使用 PHP

  • 通过 3 个简单的步骤使用 PHP 进行网页抓取

为什么使用PHP

PHP 目前支持约 40% 的网络,包括 WordPress 和 Slack 等网站。在 Web 开发方面,它是更流行的服务器端脚本语言之一。对于那些使用 MySQL 的人来说,他们的数据库是密切相关的。它是一种相对容易学习的语言,具有良好的文档和库,可以减少开发时间。

开始使用 PHP

本指南将介绍一种手动网络抓取的方法,您可以将机器人发送到网络服务器并使用 PHP 作为基础编程语言收集数据。这与使用可以简化流程的 全自动数据收集工具相反。

网络抓取工具将通过向服务器发送 HTTP 请求然后收集网站代码来发挥作用。然后,我们将教您如何解析检索到的信息。

以下是可能出现在您希望抓取的网站标题中的代码片段示例:

<html><body><h1>This is a heading!</h1></body></html>

一旦检索到此代码,就需要对其进行解析,以便分析人员可以阅读和理解文本。在此示例中,解析后,您将得到以下纯文本:

‘This is a heading!’

开始之前,请确保您的计算机上安装了PHP

通过 3 个简单的步骤使用 PHP 进行网页抓取

第一步:收集目标网站的代码


首先输入以下代码:

<?php
$code = file_get_contents (“http://quotes.toscrape.com”);
?>

在编码约定方面:

  • “<?php”和“?>”用于所有 PHP 文档中命令的开头和结尾。

  • 第二行设置一个名为“$code”的变量,它与相关 URL 的内容有关,在本例中,我们将定位:“http://quotes.toscrape.com”。 这将有助于URL 代码存储在“$code”变量中。

更喜欢全自动网络抓取解决方案?立即获取免费演示

第二步:解析网页

这项工作旨在收集来自该网站的所有报价:

报价网站上的报价文本

右键单击目标页面并单击“查看页面源代码”,将打开一个包含源代码的新窗口。在我们的示例中,您会注意到所有引号都包含在 <span> 标记中,并且带有 itemprop 属性的“text”类也设置为“text”,如下所示:

引用代码示例

我们将首先利用 PHP 去除代码中所有不需要的文本,<span> 标记中出现的引号除外,然后使用“echo”功能将其显示在我们的屏幕上:

<?php
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code);

$splitCode = explode("<", $code);

// Find the first occurance of the opening tag of the quotes:
$openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);

// Find the first occurance of the closing tag of the quotes
$closingTag = array_search('/span', $splitCode, true);

// Now, find the text in between the tags
$i = $openingTag;
$total = "";
while ($i < $closingTag) {
       $total = $total . $splitCode[$i];
       $i = $i + 1;
}
$final = substr($total, 37);
echo $final;
?>

在第 2 行,它将代码中所有出现的“>”替换为“<>”。这样它就可以在第 5 行中与“<”一起拆分。现在,它具有代码中所有标签的数组。在第 8 行,我们的程序找到开始 <span> 标记的位置,并在第 11 行找到 </span> 结束标记的位置。

现在需要做的就是检索这两次事件之间的文本。它通过创建一个名为“i”的变量来实现这一点,该变量的值是开始标记变量的位置。然后它创建一个变量,以便稍后将结果输入。在第 16 行,它开始遍历开始标记后的每个字母,将字母添加到总值,然后增加变量“i”。一旦它通过了结束标签,循环就会停止。

接下来,它会删除最终字符串的前 37 位数字,因为前 37 位数字是我们正在解析的标记中的数字——<span> 标记。最后,它使用“回声函数”检索最终结果。

运行该程序后,它将看起来像这样:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.”

这是我们在没有任何“非人类友好”代码的情况下抓取的网站上显示的第一条引述。

第三步:循环

您可能已经注意到,它只收集第一次出现的情况,之后就没有了。为了解决这个问题,我们可以简单地删除我们刚刚返回的事件,然后重复这个过程,直到我们检索到它们。此外,我们可以通过将抓取过程放入一个函数中来简化我们的代码,以便它可以在我们需要的时候运行。尝试使用此代码:

<?php
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code);

$splitCode = explode("<", $code);

functionparseCode($splitCode) {
         // Find the first occurance of the opening tag of the quotes:
         $openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);
         // Find the first occurance of the closing tag of the quotes:
         $GLOBALS[closingTag] = array_search('/span', $splitCode, true);
         
         // Now, find the text in between the tags
$i = $openingTag;
$total = "";
while ($i < $GLOBALS["closingTag"]) {
        $total = $total . $splitCode[$i];
        $i = $i + 1;
}
// Run the function, then update splitCode to delete the previous occurance// that it can be repeated for the next quote, then loop through 3 times// (You can change how many times):parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);

?>

您可能已经注意到,我们之前的代码已被输入到名为“parseCode”的函数中,其中包含一个名为“$splitCode”的参数,以便它可以访问代码,然后“回显”结果。'parseCode' 函数在第 27 行运行,然后在第 28 行,我们的程序删除了之前出现的结束标记,以便可以复制它。第 27 行和第 28 行只是简单地重复了大约3 次,以便程序可以识别一种模式并发现下一次出现的情况。

最后,我们将结束标记作为一个具有“$GLOBALS”超全局范围的“全局变量”输入,在第 21 行,我们在它返回的每一行周围输入 <p> 标记,这样它将为每个新的新行创建一个新行引用它解析的。这是结果:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.”

“There are only two ways to live your life. One is as though nothing is a miracle. TheOther is as though everything is a miracle.”

“Try not to become a man of success. Rather become a man of value.”

结果正是我们想要的。没有代码,只有可读的文本。几乎任何目标站点都可以复制此过程,例如从 eBay 中抓取目标数据点,比如产品定价、评论和 SKU(库存单位)。

总结

使用 PHP 在网络上抓取目标数据可能是一个有效的过程,尽管速度较慢/手动过程。公司可能想要考虑的一种可行替代方案是简单地购买现成的数据集。这可以节省时间和资源,使您和您的团队可以将所有注意力转移到扩展业务、确保客户满意度以及专注于核心产品开发上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值