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

PHP和phpSpider:如何应对网站变动导致的数据爬取失败?

php和phpspider:如何应对网站变动导致的数据爬取失败?

导语:
网络爬虫是一种自动化程序,用于从网站上获取数据并进行处理。PHP是一种广泛使用的编程语言,而phpSpider是一个基于PHP的开源网络爬虫框架。然而,面对网站的持续变动,原本可以正常运行的爬虫可能会失败。本文将介绍如何在PHP和phpSpider中应对网站变动导致的数据爬取失败,并提供一些示例代码供参考。

一、了解网站结构的变化
在应对网站变动导致的数据爬取失败之前,我们需要先了解网站结构的变化。有时,网站的HTML结构可能会发生变化,比如修改了标签名、删除了某些标签或者改变了标签的层级结构。此外,网站的URL格式也可能发生变化,可能会添加参数或者修改路径。因此,我们需要运行爬虫并观察错误信息,找出引起爬取失败的具体原因。

二、灵活处理HTML结构的变化
当发现网站的HTML结构发生变化时,我们可以通过修改爬虫的代码来适应这些变化。下面是一些可用的方法:

  1. 通过XPath或CSS选择器选择元素
    XPath和CSS选择器是两种常用的选择元素的方法。当标签名发生变化时,可以使用XPath或CSS选择器来选择元素,而不是依赖于标签名。例如,原本使用以下代码选择某个标签:

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

    1

    $node = $html->find('div.article', 0);

    若标签名变为

    ,可以使用XPath来选择该标签:

    1

    $node = $html->xpath('//section[@class="article"]')[0];

  2. 处理元素不存在的情况
    在网站变动时,有些元素可能被删除或者移动到其他位置。为了应对这种情况,我们可以先判断元素是否存在,然后再提取数据。例如,原本使用以下代码提取某个元素的文本内容:

    1

    2

    $element = $node->find('p', 0);

    $content = $element->text();

    若该元素可能不存在,可以使用如下代码:

    1

    2

    3

    4

    5

    if ($element = $node->find('p', 0)) {

     $content = $element->text();

    } else {

     $content = "";

    }

  3. 使用正则表达式匹配
    当HTML结构变动较大、无法通过常规方法选择元素时,可以使用正则表达式匹配所需数据。正则表达式是一种强大的模式匹配工具,可以根据特定的模式来匹配文本。例如,原本通过选择元素获取图片URL:

    1

    $imageUrl = $node->find('img', 0)->src;

    若无法选择到图片元素,可以使用正则表达式从HTML中提取图片URL:

    1

    2

    preg_match('/<img src="(.*?)"/', $html, $matches);

    $imageUrl = $matches[1];

三、处理URL变化
当网站的URL格式发生变化时,我们需要修改爬虫代码来适应新的URL格式。下面是一些可用的方法:

  1. 构建URL
    如果新的URL格式是在原有URL的基础上添加了参数,我们可以使用PHP的URL构建函数来构建新的URL。例如,原本使用以下代码提取下一页的URL:

    1

    $nextPageUrl = $html->find('a.next', 0)->href;

    若网站在URL后面添加了参数page,可以使用http_build_query函数构建新的URL:

    1

    $nextPageUrl = $baseUrl . '?' . http_build_query(array('page' => $pageNum + 1));

  2. 使用正则表达式匹配URL
    当URL格式变化较为复杂时,我们可以使用正则表达式来匹配新的URL格式。例如,原本使用以下代码提取文章的URL:

    1

    $articleUrl = $node->find('a', 0)->href;

    若新的URL格式不再使用标签,可以使用正则表达式来匹配URL:

    1

    2

    <a>preg_match('/<a href="(.*?)"/', $html, $matches);

    $articleUrl = $matches[1];</a>

结语:
当网站的结构和URL发生变化时,我们需要灵活地调整爬虫代码以适应变动,确保数据爬取的准确性。以上介绍了在PHP和phpSpider中应对网站变动导致的数据爬取失败的方法,并提供了一些示例代码供参考。希望读者能够通过本文学习到对付网站变动的技巧,并能够顺利地完成数据爬取任务。

相关文章:

PHP和phpSpider:如何应对网站变动导致的数据爬取失败?

php和phpspider&#xff1a;如何应对网站变动导致的数据爬取失败&#xff1f; 导语&#xff1a; 网络爬虫是一种自动化程序&#xff0c;用于从网站上获取数据并进行处理。PHP是一种广泛使用的编程语言&#xff0c;而phpSpider是一个基于PHP的开源网络爬虫框架。然而&#xff0…...

聊聊etsy平台,一个年入百万的项目

聊聊etsy平台&#xff0c;一个年入百万的项目 什么是etsy,这是怎样一个平台&#xff0c;怎样盈利的&#xff1f;相信现在大家满脑子都是这些疑问。 这个平台也是无意间一个学员提到的&#xff0c;据说他朋友靠这个平台年赚好几百万。苦于门槛太高&#xff0c;他也做不了。今天…...

SyntaxError: Unexpected token ‘??=‘

前端运行报错&#xff1a; globalThis.GLOBAL_NX_VERSION ?? GLOBAL_NX_VERSION;^^^SyntaxError: Unexpected token ??解决&#xff1a; 检查node版本 node -v当前使用的是14.21.3的版本&#xff0c;切换到一个16.0.0以上的版本即可&#xff0c;推荐使用nvm管理node版本 …...

python如何输出list

直接输出list_a中的元素三种方法&#xff1a; list_a [1,2,3,313,1] 第一种 for i in range(len(list_a)):print(list_a[i]) 1 2 3 313 1 第二种 for i in list_a:print(i) 1 2 3 313 1 第三种&#xff0c;使用enumerate输出list_a方法&#xff1a; for i&#xff0c;j in enum…...

【面试系列】SQL 高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

【代码随想录训练营】【Day 66】【图论-3】| 卡码 101-104

【代码随想录训练营】【Day 66】【图论-3】| 卡码 101-104 需强化知识点 103&#xff0c;104 优化思路 题目 101. 孤岛的总面积 此处 area 多余 def dfs(grid, x, y, area):dirs [[0, 1], [0, -1], [1, 0], [-1, 0]]m, n len(grid), len(grid[0])area[0] 1grid[x][y] …...

【面试系列】C#高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…...

AI助力校园安全:EasyCVR视频智能技术在校园欺凌中的应用

一、背景分析 近年来&#xff0c;各地深入开展中小学生欺凌行为治理工作&#xff0c;但有的地方学生欺凌事件仍时有发生&#xff0c;严重损害学生身心健康&#xff0c;引发社会广泛关注。为此&#xff0c;教育部制定了《防范中小学生欺凌专项治理行动工作方案》进一步防范和遏…...

Yolov8可视化界面使用说明,含代码

⭐⭐ YOLOv8改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ​ ⭐⭐ YOLOv8可视化界面如下 使用需要安装opencv-python、torch、numpy及PySide6(python版本>3.9) pip install PySide6 pip install numpy pip install opencv-python 使用说明 运行下方代码&#xf…...

怎么使用MarkDown画矩阵

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 今天写文章需要用到矩阵&#xff0c;记录一下 画矩阵需要用到特殊的语法 &#xff08;1&#xff09;画普通矩阵&#xff0c;不带括号的 $$be…...

Kafka入门-基础概念及参数

一、Kafka术语 1. Broker Kafka属于分布式的消息引擎系统&#xff0c;它的主要功能是提供一套完备的消息发布与订阅解决方案。可以为每个业务、每个应用甚至是每类数据都创建专属的主题。 Kafka的服务器端由被称为Broker的服务进程构成&#xff0c;即一个Kafka集群由多个Broke…...

Clickhouse 常见操作

数据查询 从json array string中解析字段 json array string 为json.dumps(array(dict)) select JSONExtractString(row,"Date") as Date from( select arrayJoin(JSONExtractArrayRaw(Remarks)) as row from table x )JSONExtractArrayRaw&#xff1a; 将JsonS…...

Docker使用daocloud镜像加速

之前给大家分享的阿里云的镜像加速&#xff0c;今天再给大家分享一个还可以使用的镜像加速地址daocloud。 经过测试速度还是比较快的。 [rootbogon ~]# cat /etc/docker/daemon.json {"registry-mirrors": ["https://docker.m.daocloud.io"] }[rootbogon…...

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口&#xff08;Time window&#xff09; 2.计数窗口&#xff08;Count window&#xff09; 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器&#xff1a; 窗口函数 增量聚合函数&#xff1a; 全窗口函数…...

lodash.js 工具库

lodash 是什么? Lodash是一个流行的JavaScript实用工具库,提供了许多高效、高兼容性的工具函数,能够方便地处理集合、字符串、数值、函数等多种数据类型,大大提高工作效率。 lodash官网 文档参见:Lodash Documentation lodash 在Vue中怎么使用? 1、首先安装 lodash np…...

使用ElementUI组件库

引入ElementUI组件库 1.安装插件 npm i element-ui -S 2.引入组件库 import ElementUI from element-ui; 3.引入全部样式 import element-ui/lib/theme-chalk/index.css; 4.使用 Vue.use(ElementUI); 5.在官网寻找所需样式 饿了么组件官网 我这里以button为例 6.在组件中使用…...

【SkiaSharp绘图14】SKCanvas方法详解(三)URL注释、按顶点绘制、 是否裁切区域之外、旋转、缩放、倾斜、平移、保存/恢复画布

文章目录 SKCanvas方法DrawUrlAnnotation 绘制URL注释DrawVertices 按顶点绘制Flush 立即绘制QuickReject 判断区域是否在裁切区域之外ResetMatrix重置矩阵Restore、RestoreToCountRotateDegrees按角度旋转画布RotateRadians按弧度旋转画布SaveLayer保存并新建图层Scale 缩放画…...

WebDriver API (2)

本文将继续上文对WebDriver API的功能使用进行介绍。 一、浏览器操作 1. 浏览器前进forward与后退back 浏览器前进操作是指导航到前一个页面&#xff0c;在浏览器的历史记录中向前移动一页。 浏览器后退操作是指导航到前一个页面&#xff0c;在浏览器的历史记录中向后移动一…...

GCP FrontendConfig 详解:优化您的云负载均衡

目录 1. 什么是GCP FrontendConfig? 2. FrontendConfig的主要功能 2.1 协议选择 2.2 SSL/TLS配置 2.3 重定向配置 2.4 自定义响应头 3. 配置FrontendConfig 4. FrontendConfig的高级特性 4.1 智能路由 4.2 流量控制 4.3 日志和监控 5. FrontendConfig最佳实践 5.…...

TensorFlow代码逻辑 vs PyTorch代码逻辑

文章目录 一、TensorFlow&#xff08;一&#xff09;导入必要的库&#xff08;二&#xff09;加载MNIST数据集&#xff08;三&#xff09;数据预处理&#xff08;四&#xff09;构建神经网络模型&#xff08;五&#xff09;编译模型&#xff08;六&#xff09;训练模型&#xf…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...