智能,轻量,高效的爬虫工具 (爬虫宝第一代), HSpider
场景
之前玩爬虫宝一时爽,但是我很快发现了一个致命的问题。就是chat3.5 有时候误判,Claude2 是遇到大一点的html就无法解析,chat4 Api没有申请下来,chat3.5 误判这个可以纠正,但是每次爬取花费的钱都是2刀以上,我定义了一个任务,结果一晚上跑了我好几十刀(忘记设置限额了,被自己蠢哭了),心疼,所以我要把部分功能剥离出来,先提供一个先行版,做成HSpider(后续可能要改名)以供使用。
HSpider
语言: python
涉及: 自动化 + html解析
原理: 自动化 + html解析
HSpider是一个基于Python的工具,简单,强大,智能,易用,用于在HTML文档中查找并分析特定文本的出现。它利用了BeautifulSoup库的功能来解析HTML内容,并结合正则表达式来定位特定的文本。以下是这个类实现的大致原理,详细解释其工作方式和各个组件的角色:
BeautifulSoup和HTML解析
BeautifulSoup是一个流行的Python库,用于解析HTML和XML文档。它能够将复杂的HTML文档转换成一个易于操作的Python对象结构。每个HTML标签都被转换为BeautifulSoup的Tag对象,这些对象可以用来访问标签的名称、属性和内容。此外,BeautifulSoup还提供了丰富的方法和属性来遍历和搜索文档树。
正则表达式与文本搜索
正则表达式是一种强大的文本匹配工具,它允许定义复杂的搜索模式。在TextFinder类中,正则表达式用于创建一个模式,该模式能够匹配用户指定的文本。通过将用户的文本转换为一个正则表达式模式,类能够在HTML内容中查找完全或部分匹配的文本字符串。
查找包含特定文本的元素
TextFinder类的核心功能之一是找到包含用户指定文本的最小HTML元素。为此,它遍历文档中的每个元素,并使用之前构建的正则表达式模式来检查元素的文本内容。如果一个元素的文本内容与模式匹配,类会进一步检查该元素的所有子元素,以确保找到的元素是包含指定文本的最小单位。
获取元素的层级结构
类中的另一个重要功能是能够提供指定元素在HTML文档中的层级结构。这是通过从目标元素开始,逐级向上遍历其父元素来实现的。在这个过程中,每个元素的标签名和属性都被记录下来。这样可以得到一个从根元素到目标元素的路径,这对于理解元素在整个文档中的上下文非常有帮助。
日志记录
使用Python的内置日志模块来记录关键的信息和警告。这对于调试和追踪类的行为非常有用。日志记录可以帮助开发者理解类的工作流程,以及在处理特定HTML文档时遇到的任何问题。
用户友好的接口
提供了一个简单易用的接口,使得用户可以轻松地将其集成到自己的项目中。通过几个简单的方法调用,用户可以执行复杂的HTML解析和文本搜索任务。这使得类不仅对有经验的开发者有用,对那些不太熟悉HTML解析或正则表达式的用户也同样有用。
示例用法
记录规则,例如:你要爬取所有的亚马逊产品的标题和售价,search_text 就是标题名 / 售价名,而test.html则是 页面的html,element_hierarchy 就是生成的规则,你需要保存下来.。
if __name__ == "__main__":# 读取HTML内容with open('/test.html', 'r', encoding='utf-8') as file:html_content = file.read()# 实例化TextFinderfinder = TextFinder(html_content)# 搜索文本search_text = "Material"# 找到包含该文本的元素element = finder.find_element_with_text(search_text)element_hierarchy = finder.get_element_hierarchy(element)element_hierarchy
规则的使用
# 示例用法
if __name__ == "__main__":# ... (之前的代码保持不变)# 层级关系的JSON数据json_hierarchy = '''[{"tag": "div", "attributes": {"id": "centerCol"}},{"tag": "div", "attributes": {"id": "productOverview_feature_div"}},{"tag": "div", "attributes": {"class": ["a-section", "a-spacing-small", "a-spacing-top-small"]}},{"tag": "table", "attributes": {"class": ["a-normal", "a-spacing-micro"]}},{"tag": "tr", "attributes": {"class": ["a-spacing-small", "po-material"]}},{"tag": "td", "attributes": {"class": ["a-span3"]}},{"tag": "span", "attributes": {"class": ["a-size-base", "a-text-bold"]}}]'''# 根据层级关系找到元素found_element = finder.find_element_by_hierarchy(json_hierarchy)if found_element:print("Found Element:", finder.get_element_details(found_element))else:print("Element not found.")
这样你就可以根据规则拿到别的页面的元素了。使用自动化工具(针对反爬网址)或者 请求(没有1设置反爬的网站) 拿到html 然后去匹配规则即可。
开源时间
预计在2024-01-08日左右开源。欢迎大家到时候使用!
注: 不需要翻墙和付费(AI付费),届时放心食用。
相关文章:
智能,轻量,高效的爬虫工具 (爬虫宝第一代), HSpider
场景 之前玩爬虫宝一时爽,但是我很快发现了一个致命的问题。就是chat3.5 有时候误判,Claude2 是遇到大一点的html就无法解析,chat4 Api没有申请下来,chat3.5 误判这个可以纠正,但是每次爬取花费的钱都是2刀以上&#…...

IDEA Maven Helper插件 解决jar冲突
Jar包冲突报错 程序抛出java.lang.ClassNotFoundException异常; 程序抛出java.lang.NoSuchMethodError异常; 程序抛出java.lang.NoClassDefFoundError异常; 程序抛出java.lang.LinkageError异常等;Maven Jar包管理机制 在Maven项…...
装饰 Web3 项目的用户交互界面(Web3项目二实战之四)
用户交互界面是Web3项目必不可少的,毕竟,Web3项目最终是面向用户的,所以,Web3项目总得需要一个优美的UI界面,已达到用户在视觉上精彩盛宴。 诚然,一个Web3项目若到了用户交互界面,大体上,这个Web3项目也将告一段落了。 没错,Web3第二个项目,也将终结于本篇,顺势拉开…...

【数据库系统概论】第3章-关系数据库标准语言SQL(3)
文章目录 3.5 数据更新3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.6 空值的处理3.7 视图3.7.1 建立视图3.7.2 查询视图3.7.3 更新视图3.7.4 视图的作用 3.5 数据更新 3.5.1 插入数据 注意:插入数据时要满足表或者列的约束条件,否则插入失败&#x…...

理解io/nio/netty
一、io io即input/output,输入和输出 1.1 分类 输入流、输出流(按数据流向) 字节流(InputStream/OutputStream(细分File/Buffered))、字符流(Reader/Writer(细分File/Buffered/pu…...

旅游品牌网站搭建的作用是什么
我国旅游业规模非常高,各地大小旅游景区也是非常多,尤其节假日更是可以达到峰值,无论周边游还是外地游对所要去的景区,消费者总是需要来回了解很多,浏览器查或旅行社咨询等。 对旅游企业而言,传统线下方式…...

Linux操作系统——进程(五)环境变量
环境变量 有了我们前面的命令行参数的理解基础呢,我们下面进入环境变量这一个部分的内容的学习。 一般在我们安装一些开发工具尤其是有解释器的开发工具的时候,我们呢一般都要配置环境变量,可能都不太清楚自己为什么要配置环境变量…...

西门子博途怎么使用PID_Compact做pid调试
到目前为止,我已经在S7-1200中创建了一个可运行的PLC程序,并在Basic Panel中创建了一个HMI项目来操纵和操作该程序。 引文:博途工控人平时在哪里技术交流博途工控人社群 现在,我们该如何深入的让程序开始逐渐智能化呢,…...

结构型模式 | 适配器模式
一、适配器模式 1、原理 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要分为三类:类适配器模式、对象适配器模式、接口…...

基于Python的车牌识别系统实现
本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。 精彩专栏持续更新推荐订阅,收藏关注不迷路 微信小程序实战开发专栏 目录 引言车牌识别…...

时间序列预测模型介绍及使用经验总结
1. 时序预测背景 时序数据,就是序列随时间变化的数据。时间序列分析,一般有时域和频域两种分析方法。时序预测的本质是在时域和频域层面探索时间序列变化的内在规律。 下图描述的是时域(temporal domain),横坐标是时…...

Docker知识总结
文章目录 Docker1 Docker简介1.1 什么是虚拟化1.2 什么是Docker1.3 容器与虚拟机比较1.4 Docker 组件1.4.1 Docker服务器与客户端1.4.2 Docker镜像与容器1.4.3 Registry(注册中心) 2 Docker安装与启动2.1 安装Docker2.2 设置ustc的镜像2.3 Docker的启动与…...
算法训练营Day25
#Java #回溯 开源学习资料 Feeling and experiences: 复原IP地址:力扣题目链接 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如࿱…...

docker笔记2-docker 容器
docker 容器的运行 docker run 镜像名:版本标签: 创建 启动容器 docker run 镜像名 ,如果镜像不存在,则会在线下载镜像。 注意事项: 容器内的进程必须处于前台运行状态,不能后台(守护进程运行…...

redis 从0到1完整学习 (七):ZipList 数据结构
文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一):安装&初识 redis》 《redis 从0到1完整学习 (二&am…...

2015年第四届数学建模国际赛小美赛C题科学能解决恐怖主义吗解题全过程文档及程序
2015年第四届数学建模国际赛小美赛 C题 科学能解决恐怖主义吗 原题再现: 为什么人们转向恐怖主义,特别是自杀性恐怖主义?主要原因是什么?这通常是大问题和小问题的结合,或者是一些人所说的“推拉”因素。更大的问题包…...

基于Java开发的微信约拍小程序
一、系统架构 前端:vue | element-ui 后端:springboot | mybatis 环境:jdk8 | mysql8 | maven | mysql 二、代码及数据库 三、功能说明 01. 首页 02. 授权登录 03. 我的 04. 我的-编辑个人资料 05. 我的-我的联系方式 06. …...

蓝桥杯的学习规划
c语言基础: Python语言基础 学习路径:画框的要着重学习...

EMC噪声的本质
01 频谱的含义 频谱是将电磁波分解为正弦波分量,并按波长顺序排列的波谱,就是将具有复杂组成的东西分解(频谱分析仪)为单纯成分,并把这些成分按其特征量的大小依序排列(部分不计),…...
Redis遇到过的问题 (Could not get a resource from the pool )
生产上通过scan命令,查询一个大key耗时40s后,报 Could not get a resource from the pool,初步报错是连接池的连接数不够,从网上搜了一些解决方案。 排查过程: 一、首先需要先尝试连接redis,如果连接不上那…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...