当前位置: 首页 > 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…...

Harness Engineering 又是什么新 AI 玩具?

今天我们聊了业内最新提出的 Harness Engineering。可以看到&#xff0c;在 AI 智能体优先的世界里&#xff0c;软件工程的鲁棒性开始转移到了支撑智能体上。最近 AI 编程可以说是卷上天了&#xff0c;不得不说时代的大车轱辘已经碾过来了。GLM 一个月内狂发新模型。我们今天来…...

Firecrawl MCP Server 在 Cursor 中的完美配置:10个实用技巧提升开发效率

Firecrawl MCP Server 在 Cursor 中的完美配置&#xff1a;10个实用技巧提升开发效率 【免费下载链接】firecrawl-mcp-server Official Firecrawl MCP Server - Adds powerful web scraping to Cursor, Claude and any other LLM clients. 项目地址: https://gitcode.com/gh_…...

如何绕过App Store限制:iOS第三方应用安装的终极指南

如何绕过App Store限制&#xff1a;iOS第三方应用安装的终极指南 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 还在为苹果App Store的严格限制而烦恼吗&…...

OpenClaw安全加固指南:百川2-13B模型权限与文件操作隔离

OpenClaw安全加固指南&#xff1a;百川2-13B模型权限与文件操作隔离 1. 为什么需要安全加固&#xff1f; 上周我在调试一个自动整理文档的OpenClaw任务时&#xff0c;差点酿成大祸。当时AI助手误将/usr/local/bin识别为"需要整理的文件夹"&#xff0c;开始疯狂删除…...

STM32CubeMX 6.4.0 + STM32F407ZGT6 实战:基于YT8512C PHY的lwIP以太网配置与调试

1. 环境准备与硬件连接 最近在做一个物联网项目时&#xff0c;发现正点原子探索者开发板的PHY芯片从常见的DP83848换成了YT8512C&#xff0c;导致之前能跑通的以太网代码突然失效了。经过一番折腾&#xff0c;终于用STM32CubeMX 6.4.0完成了配置。先说说硬件准备&#xff1a; 开…...

ER-Save-Editor技术解析与实战指南:从原理到创新应用

ER-Save-Editor技术解析与实战指南&#xff1a;从原理到创新应用 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 技术原理篇&#xff1a;开源存…...

COMSOL相场模拟:枝晶生长与雪花形成的模型与教程

comsol相场模拟枝晶生长&#xff08;雪花的形成&#xff09; 有模型和教程 凌晨三点盯着显微镜下的冰晶生长&#xff0c;突然意识到这玩意儿和编程调试一样——参数调不好分分钟给你长歪。相场法模拟枝晶生长这事儿&#xff0c;本质上就是在用数学方程式和物理定律"种&qu…...

PX4飞控实战:为纳雷NRA12激光雷达手搓一个串口驱动(附完整源码)

PX4飞控实战&#xff1a;为纳雷NRA12激光雷达手搓一个串口驱动&#xff08;附完整源码&#xff09; 去年夏天&#xff0c;我在调试一台农业植保无人机时遇到了一个棘手的问题——现有的激光雷达在强光环境下表现不稳定。经过多次测试对比&#xff0c;最终选定了纳雷NRA12这款抗…...

Codex CLI 多环境配置秘籍:如何用 profiles 一键切换 OpenAI/Mistral/Ollama

Codex CLI 多环境配置秘籍&#xff1a;如何用 profiles 一键切换 OpenAI/Mistral/Ollama 当你的开发工作流需要同时对接多个AI模型提供商时——比如公司项目使用OpenAI的GPT-4&#xff0c;个人实验采用本地Ollama托管的Mistral&#xff0c;而临时调试又需要连接Azure的API端点—…...

TripoSR:0.5秒从单图到3D模型,开源3D重建的革命性工具

TripoSR&#xff1a;0.5秒从单图到3D模型&#xff0c;开源3D重建的革命性工具 【免费下载链接】TripoSR 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR TripoSR是一款由Tripo AI与Stability AI联合开发的开源单图像3D重建模型&#xff0c;能够在短短0.5秒…...