随着互联网高速发展,信息爆炸的时代已经到来。在这样的时代,搜索引擎成为了我们获取信息的主要工具,而这些搜索引擎所提供的海量数据让我们难以想象。然而,对于一些特定领域的研究者或者数据分析员来说,他们所需要的信息可能只是这些搜索结果中的一小部分数据。在这种情况下,我们需要使用爬虫程序来准确地获取我们想要的数据。
在本文中,我们将使用 PHP 编写一个简单的爬虫程序,从百度搜索结果中提取我们所需的数据。这个程序的核心是使用 PHP 的 cURL 库模拟 HTTP 请求,然后使用正则表达式等方法解析 HTML 页面。
思路
在开始编写爬虫程序之前,我们需要先明确几个问题:
- 目标:我们想要从百度搜索结果页中爬取什么数据?
- URL:我们需要获取哪个 URL 下的数据?
- 数据格式:百度搜索结果页的数据是什么格式?
在考虑我们需要获取哪些数据时,让我们以“PHP 爬虫”这个关键词为例。如果我们在百度上搜索这个关键词,我们能够看到以下信息:
- 搜索结果的总数量
- 每个搜索结果的标题
- 每个搜索结果的描述
- 每个搜索结果的网址
那么,我们就可以将我们的目标定义为从百度搜索结果中提取出每个结果的标题、描述和网址。
获取数据的第一步就是要明确我们要获取的 URL。在我们的例子中,我们需要获取的 URL 是这样的:https://www.baidu.com/s?wd=php%20爬虫
。通过在百度搜索栏中输入“php 爬虫”,我们可以自动跳转到这个 URL。
接着,我们需要了解我们将要解析的数据的格式。在我们的例子中,搜索结果以类似下面的 HTML 代码的形式存在:
<div class="result c-container "> <h3 class="t"> <a href="http://www.example.com/" target="_blank" class="c-showurl"> www.example.com </a> <em>PHP</em> 爬虫是什么? - PHP 入门教程 - 极客学院 </h3> <div class="c-abstract"> <span class=" newTimeFactor_before_abs">2天前 - </span> <em>PHP</em> 爬虫是一种方便快捷的数据采集方式 ... 目前的爬虫主要是通过<a href="https://www.baidu.com/s?wd=python%20爬虫&rsp=1&f=8&ie=utf-8&tn=95754739_hao_pg" target="_blank" class="text-underline">python 爬虫</a>实现。相比于 <a href="https://www.baidu.com/link?url=zdiwLoE_LR5bzae8ifgYsYXBfvatKGD0D6Yjli9c8_nsisbDmnS-r8l7g-5G2NI79x6yO8NnDdnLqhNuqOZtedHjiOZbhsDNwkFx3pW6yBt&wd=&eqid=f774f5d00003a46c000000065f51fc9a" target="_blank" class="text-underline">PHP</a>,<a href="https://www.baidu.com/link?url=zdiwLoE_LR5bzae8ifgYsYXBfvatKGD0D6Yjli9c8_ns isbDmnS-r8l7g-5G2NI79x6yO8NnDdnLqhNuqOZtedHjiOZbhsDNwkFx3pW6yBt& wd=&eqid=f774f5d00003a46c000000065f51fc9a" target="_blank" class="text-underline">PHP</a> 一般用作... </div> </div>
在以上 HTML 代码片段中,可以看到每个搜索结果都嵌套在 21796805ef09aaa51089021f05184af8
标签内。每个搜索结果都有一个标题,对应的 HTML 格式为 4fadc3c7e100e7abd749338f79a967d5
,其中链接地址嵌套在 3499910bf9dac5ae3c52d5ede7383485
标签内。每个搜索结果都有一个描述,对应的 HTML 格式为 fb66738ee24dc0ed63bb579c482ae1b0
。每个搜索结果还有一个网址,在 3499910bf9dac5ae3c52d5ede7383485
标签内含有 class="c-showurl"
。
现在我们已经明确了我们要获取到的数据的格式及我们需要解析的 HTML 数据的格式,我们已经可以开始编写我们的爬虫程序了。
编写代码
我们将我们的 PHP 爬虫代码分成了三个步骤:
- 获取百度搜索结果的 HTML 页面
- 解析 HTML 页面
- 将解析后的数据以数组形式返回
获取百度搜索结果的 HTML 页面
我们可以使用 PHP 的 cURL 库发送 HTTP 请求,从而获取百度搜索结果的 HTML 页面。在这个例子中,我们将搜索页面的 URL 存在 $url
变量中。然后创建一个 cURL 的句柄,并设置许多选项,例如:设置 URL、设置请求头、设置代理、设置超时、设置请求方式为 GET,最后执行这个句柄,获取 HTML 页面。
<?php $url = "https://www.baidu.com/s?wd=php%20爬虫"; // 创建curl句柄 $ch = curl_init(); // 设置curl选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt( $ch, CURLOPT_HTTPHEADER, [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer: https://www.baidu.com/', 'Connection: keep-alive', ] ); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); //执行curl句柄 $result = curl_exec($ch);
在这个例子中,我们使用了 cURL 库提供的许多选项。例如,设置请求头来模拟浏览器发送的 HTTP 请求,设置请求方式为 GET,设置超时时间,等等。
解析 HTML 页面
在获取了百度搜索结果的 HTML 页面之后,我们需要解析它来获取我们需要的信息。在这个例子中,我们将使用 PHP 的正则表达式来解析 HTML 页面。
以下是我们使用正则表达式来从 HTML 页面中提取标题、描述和链接:
<?php $result = curl_exec($ch); // 匹配所有搜索结果 preg_match_all( '/<div.*?class="result.*?">.*?<h3.*?>.*?<a.*?href="(.*?)".*?>s*(.*?)s*</a>.*?</h3>.*?<div.*?class="c-abstract.*?">(.*?)</div>.*?</div>/', $result, $matches ); // 提取搜索结果中的标题、描述和链接 $data = []; for ($i=0; $i<count($matches[0]); $i++) { $data[] = [ 'title' => strip_tags($matches[2][$i]), // 去除标题中的 HTML 标签 'description' => strip_tags($matches[3][$i]), // 去除描述中的 HTML 标签 'link' => $matches[1][$i] ]; }; // 关闭curl句柄 curl_close($ch);
在以上代码中,我们使用了 PHP 的正则表达式来匹配所有的搜索结果。然后,我们使用一个循环来遍历所有的搜索结果,从中提取出我们需要的标题、描述和链接。由于我们从 HTML 中获取到的标题和描述中会含有 HTML 标签,我们使用 strip_tags
函数来将它们去除。
将结果返回
在以上代码中,我们已经获取了我们需要的数据,现在只需要将结果以数组形式返回即可。我们将我们整个爬虫程序封装成一个函数,将获取到的数据以数组的形式作为返回值:
<?php function spider_baidu($keyword) { $url = "https://www.baidu.com/s?wd=" . urlencode($keyword); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt( $ch, CURLOPT_HTTPHEADER, [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer: https://www.baidu.com/', 'Connection: keep-alive', ] ); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); $result = curl_exec($ch); preg_match_all( '/<div.*?class="result.*?">.*?<h3.*?>.*?<a.*?href="(.*?)".*?>s*(.*?)s*</a>.*?</h3>.*?<div.*?class="c-abstract.*?">(.*?)</div>.*?</div>/', $result, $matches ); $data = []; for ($i=0; $i<count($matches[0]); $i++) { $data[] = [ 'title' => strip_tags($matches[2][$i]), 'description' => strip_tags($matches[3][$i]), 'link' => $matches[1][$i] ]; }; curl_close($ch); return $data; }
我们可以接收一个关键字作为参数,然后调用这个函数来获取这个关键字在百度搜索结果中的标题、描述和链接。
结论
在本文中,我们使用 PHP 编写了一个简单的爬虫程序,从百度搜索结果中提取所需数据。这个程序使用 PHP 的 cURL 库模拟 HTTP 请求,并使用正则表达式等方法来解析 HTML 页面。通过这个例子,我们可以深入了解爬虫程序是如何工作的,以及如何使用 PHP 来编写爬虫程序。在实际的项目中,我们可以根据需求修改这个程序来获取我们需要的数据。
以上是PHP 爬虫实战:从百度搜索结果中提取所需数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了PHP中的crypt()和password_hash()之间的差异,以进行密码哈希,重点介绍其实施,安全性和对现代Web应用程序的适用性。

文章讨论了通过输入验证,输出编码以及使用OWASP ESAPI和HTML净化器之类的工具来防止PHP中的跨站点脚本(XSS)。

自动加载PHP会在需要时自动加载类文件,从而通过减少内存使用和增强代码组织来提高性能。最佳实践包括使用PSR-4和有效组织代码。

本文讨论了在PHP中管理文件上传大小的管理,重点是2MB的默认限制以及如何通过修改PHP.INI设置来增加它。

本文讨论了PHP 7.1中引入的PHP中的无效类型,允许变量或参数为指定类型或NULL。它突出显示了诸如提高可读性,类型安全性和明确意图的好处,并解释了如何声明

本文讨论了unset()和unlink()功能在编程中的差异,重点关注其目的和用例。 unset()从内存中删除变量,而unlink()从文件系统中删除文件。两者都对效率至关重要


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器