当前位置: 首页 > news >正文

如何用 PHP 实现一个自定义爬虫框架

随着互联网的不断发展,信息量爆炸式增长,获取有价值的信息已经成为了许多人的需求。在这样的大环境下,爬虫技术逐渐兴起,成为了大数据时代的重要工具之一。爬虫技术的应用十分广泛,其可以用于网络舆情监测、数据分析、信息挖掘等多个领域。本文将介绍如何用 php 实现一个自定义爬虫框架。

一、爬虫框架的原理

爬虫是一种自动化获取网页信息的程序,其通过爬取网页文本,抽取有价值的数据进行分析和利用。爬虫框架是爬虫程序的基础,其包含了自定义的获取、解析、存储等方法。

通过爬虫框架实现爬虫程序,其基本流程如下:

  1. 获取网页信息:通过 HTTP 协议向目标网站发送请求,获取网页文本信息。
  2. 解析网页信息:对网页文本进行解析,抽取目标数据进行处理。
  3. 存储处理结果:将处理后的数据进行存储,以便后续的数据分析和利用。

二、PHP 爬虫框架实现

立即学习“PHP免费学习笔记(深入)”;

  1. 获取网页信息

在 PHP 中,可以通过 CURL 库实现 HTTP 请求。CURL 是一款强大的开源网络库,可以用来在 PHP 中处理 URL(Uniform Resource Locator,统一资源定位符).

代码如下:

1

2

3

4

5

6

7

8

9

10

$ch = curl_init();  // 初始化 cURL

$options array(

    CURLOPT_URL => $url// 请求的 URL

    CURLOPT_RETURNTRANSFER => 1,  // 返回原生的输出内容

    CURLOPT_ENCODING => ''// 自动处理响应头中的 Transfer-Encoding

    CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'// 模拟 user-agent

);

curl_setopt_array($ch, $options);

$result = curl_exec($ch);  // 执行请求

curl_close($ch);  // 关闭请求链接

上述代码中,首先使用 curl_init() 函数初始化 CURL,然后使用 curl_setopt_array() 函数设置 CURL 请求的各项参数,包括请求的 URL、返回原生的输出内容、自动处理响应头中的 Transfer-Encoding,以及模拟 user-agent 等。最后通过 curl_exec() 执行请求,关闭请求链接。执行上述代码后,即可成功获取目标网站的网页信息。

  1. 解析网页信息

在 PHP 中,可以使用 DOMDocument 类对 HTML 文本进行解析,其提供了一套 DOM(Document Object Model,文档对象模型)接口,可以方便地对 HTML 文本进行解析。

代码如下:

1

2

3

4

5

6

7

$doc = new DOMDocument();

$doc->loadHTML($result);  // 加载 HTML 内容

$xpath = new DOMXPath($doc);

$tags = $xpath->query('//tag')  // 获取指定标签

foreach ($tags as $tag) {

    // 对标签内容进行解析

}

上述代码首先创建了一个 DOMDocument 类的对象,然后通过 loadHTML() 函数加载网页文本,然后通过 DOMXPath 类获取指定标签,并对标签内容进行解析。

  1. 存储处理结果

在 PHP 中,可以通过 MySQL 数据库对数据进行存储,其提供了一套 PDO(PHP Data Objects,PHP 数据对象)接口,可以方便地进行数据库操作。

代码如下:

1

2

3

4

5

6

7

$pdo = new PDO('mysql:host=$dbhost;dbname=$dbname', $username, $password); // 连接数据库

$sql = 'INSERT INTO table_name (field1, field2, ...) VALUES (:value1, :value2, ...)'// SQL 语句

$stmt = $pdo->prepare($sql);  // 预处理 SQL 语句

$stmt->bindParam(':param1', $value1);  // 绑定参数

$stmt->bindParam(':param2', $value2);

...

$stmt->execute();  // 执行 SQL 语句

上述代码中,首先使用 PDO 对象连接 MySQL 数据库,然后使用 SQL 语句向指定的数据表中插入数据,通过预处理 SQL 语句,绑定参数后,直接执行 SQL 语句即可将数据成功存储到数据库中。

三、爬虫框架使用案例

在实现了爬虫框架后,我们可以用其对任何的网站进行爬取,下面将演示一个简单的使用案例。例如,我们现在需要爬取知乎的用户信息,首先我们需要获取用户的页面信息:

1

2

$url = "https://www.zhihu.com/people/xxx";

$result = getCurl($url);

然后,我们通过 XPath 对返回的页面信息进行解析,获取目标信息:

1

2

3

4

5

6

7

8

9

10

11

$doc = new DOMDocument();

$doc->loadHTML($result);

$xpath = new DOMXPath($doc);

// 用户名

$username = $xpath->query("//*[@class='ProfileHeader-name']/text()")->item(0)->nodeValue;

// 签名

$userbio = $xpath->query("//div[@class='ProfileHeader-headline']/span//@title")->item(0)->nodeValue;

// 关注数

$following_count = $xpath->query("//*[@class='NumberBoard-itemValue']/text()")->item(2)->nodeValue;

// 粉丝数

$followers_count = $xpath->query("//*[@class='NumberBoard-itemValue']/text()")->item(3)->nodeValue;

最后,我们可以使用 MySQL 数据库将获取到的目标信息存储下来:

1

2

3

4

5

6

7

8

$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

$sql = "INSERT INTO `zhihu_users`(`username`, `userbio`, `following_count`, `followers_count`, `updated_at`) VALUES (:username, :userbio, :following_count, :followers_count, NOW())";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':username', $username);

$stmt->bindParam(':userbio', $userbio);

$stmt->bindParam(':following_count', $following_count);

$stmt->bindParam(':followers_count', $followers_count);

$stmt->execute();

通过上述代码示例,我们可以看到使用 PHP 实现一个自定义爬虫框架的流程,包括获取网页信息、解析网页信息和存储处理结果等操作。通过此框架,我们可以方便地进行目标网站的抓取和数据分析,提高数据应用的效率和准确性。

相关文章:

如何用 PHP 实现一个自定义爬虫框架

随着互联网的不断发展,信息量爆炸式增长,获取有价值的信息已经成为了许多人的需求。在这样的大环境下,爬虫技术逐渐兴起,成为了大数据时代的重要工具之一。爬虫技术的应用十分广泛,其可以用于网络舆情监测、数据分析、…...

【机器学习】机器学习的重要方法——强化学习:理论,方法与实践

目录 一、强化学习的核心概念 二、强化学习算法的分类与示例代码 三.强化学习的优势 四.强化学习的应用与挑战 五、总结与展望 强化学习:理论,方法和实践 在人工智能的广阔领域中,强化学习(Reinforcement Learning, RL&…...

Linux磁盘监控思路分析

磁盘监控原理 设备又名I/O设备,泛指计算机系统中除主机以外的所有外部设备。 1.1 计算机分类 1.1.1 按照信息传输速度分: 1.低速设备:每秒传输信息仅几个字节或者百个字节,如:键盘、鼠标等 2.中速设备&#xff1a…...

pc端制作一个顶部固定的菜单栏

效果 hsl颜色 hsl颜色在css中比较方便 https://www.w3school.com.cn/css/css_colors_hsl.asp 色相(hue)是色轮上从 0 到 360 的度数。0 是红色,120 是绿色,240 是蓝色。饱和度(saturation)是一个百分比值…...

ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合

ONLYOFFICE 8.1版本桌面编辑器深度体验:创新功能与卓越性能的结合 随着数字化办公的日益普及,一款高效、功能丰富的办公软件成为了职场人士的必备工具。ONLYOFFICE团队一直致力于为用户提供全面而先进的办公解决方案。最新推出的ONLYOFFICE 8.1版本桌面编…...

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(2)

(1)在student数据库上创建一个用户表tb_account,该表包含用户id,用户名和密码。 字段名称 数据类型 注释 约束 user_id Char(8) 用户id 主键 user_name char(10) 用户名 不能为空 password char(10) 密码 默认值&a…...

socket编程常见操作

1、连接的建立 分为两种:服务端处理接收客户端的连接;服务端作为客户端连接第三方服务 //作为服务端 int listenfd socket(AF_INET, SOCK_STREAM, 0); bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) listen(listenfd, 10); //…...

springcloud-config git配置源加载(部署公钥问题)

使用gitUrl作为配置源 gitee 或者github 中有类似于发布密钥的功能,允许通过私钥只读访问指定的仓库,文档中说的是 限制了git的操作为pull 和 clone。生成私钥的方式文档连接在此 https://gitee.com/help/articles/4181#article-header0 spring config只…...

华为OD机考题HJ24 合唱队

前言 应广大同学要求,开始以OD机考题作为练习题,看看算法和数据结构掌握情况。有需要练习的可以关注下。 描述 N 位同学站成一排,音乐老师要请最少的同学出列,使得剩下的 K 位同学排成合唱队形。 设𝐾K位同学从左到…...

基于bootstrap的12种登录注册页面模板

基于bootstrap的12种登录注册页面模板,分三种类型,默认简单的登录和注册,带背景图片的登录和注册,支持弹窗的登录和注册页面html下载。 微信扫码下载...

【劳德巴赫 Trace32 高阶系列 3.1 -- trace32 svf 文件操作与 InitState】

文章目录 SVF InitStateJTAG 状态机JTAG Test-Logic-ResetJTAG Run-Test-IdleSVF InitState Format: JTAG.PROGRAM.SVF <file> [/<option>] <option>: IRPRE <value>IRPOST <value>DRPRE <value>DRPOST <value<...

爬虫知识:补环境相关知识

学习目标&#xff1a;知道为什么要补环境&#xff0c;知道要补什么环境&#xff08;使用Proxy检测&#xff09;。没有讲解怎么补 本章没有动手去实操&#xff0c;只是纯理论知识 补环境介绍 DOM与BOM DOM主要关注文档内容和结构&#xff0c;而BOM关注浏览器窗口和功能。在浏…...

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 引言&#xff1a; crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…...

【Python】探索 Pandas 中的 where 方法:条件筛选的利器

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 在数据分析中&#xff0c;Pandas 是一个强大且…...

Pikachu靶场--Sql Inject

参考借鉴 pikachu靶场练习&#xff08;详细&#xff0c;完整&#xff0c;适合新手阅读&#xff09;-CSDN博客 数字型注入(post) 这种类型的SQL注入利用在用户输入处插入数值&#xff0c;而不是字符串。攻击者试图通过输入数字来修改SQL查询的逻辑&#xff0c;以执行恶意操作。…...

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)

接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作&#xff0c;本篇我们来继续学习Series对象的运算、函数应用、时间序列操作&#xff0c;以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…...

【PYG】使用datalist定义数据集,创建一个包含多个Data对象的列表并使用DataLoader来加载这些数据

为了使用你提到的封装方式来创建一个包含多个 Data 对象的列表并使用 DataLoader 来加载这些数据&#xff0c;我们可以按照以下步骤进行&#xff1a; 创建数据&#xff1a;生成节点特征矩阵、边索引矩阵和标签。封装数据&#xff1a;使用 Data 对象将这些数据封装起来。使用 D…...

【设计模式】【创建型5-2】【工厂方法模式】

文章目录 工厂方法模式工厂方法模式的结构示例产品接口具体产品工厂接口具体工厂客户端代码 实际的使用 工厂方法模式 工厂方法模式的结构 产品&#xff08;Product&#xff09;&#xff1a;定义工厂方法所创建的对象的接口。 具体产品&#xff08;ConcreteProduct&#xff0…...

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…...

【Postman学习】

Postman是一个非常流行的API开发和测试工具&#xff0c;广泛用于Web服务的开发、测试和调试。它提供了一个图形界面&#xff0c;允许用户轻松地构建、发送和管理HTTP(S)请求&#xff0c;同时查看和分析响应。下面是对Postman接口测试工具的详细解释&#xff1a; 1. Postman简介…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...