首页/新闻资讯/正文详情

机器学习之数据解析(Machine Learning about Analysis of data)

发布时间:2026/9/26 5:09:49 来源:云帆数科 栏目:资讯中心
机器学习之数据解析(Machine Learning about Analysis of data)
二、爬虫自动化——数据解析Analysis of data1、BeautifulSoup解析HTML数据1.1 HTML解析当使用 request 库获取网页内容时返回 HTML 源码HTML 是一种标记语言相当于组织结构。使用 HTML 能够快速地阅读和提取对应的文本信息。能够直接使用正则表达式对其进行字符串处理但是若是当数据变得复杂那么 HTML 结构也会变得复杂难以进行维护。因此 BeautifulSoup 库函数的出现变成了 Python 最流行的 HTML/XML 解析库之一。其能够将 HTML 变成一棵 DOM 树文档对象模型树使我们能够向遍历文件一样遍历 HTML 结构。BeautifulSoup库核心用途解析 HTML/XML 文档通过 DOM 树结构搜索和提取到数据自动处理破损的 HTML1.2 Beautiful下载库与基础用法Beautiful下载库安装bs4库的控制台语句pip install beautifulsoup4基础使用流程import requests import re from bs4 import BeautifulSoup # requests 获取网页返回的就是 HTML 源码字符串 html requests.get(https://example.com).text # 数据简单时正则也能处理直接按字符串模式抓取 titles re.findall(rh2[^]*(.*?)/h2, html) print(titles) # 结构复杂后BeautifulSoup 把 HTML 变成 DOM 树逐层向下遍历 soup BeautifulSoup(html, html.parser) for post in soup.select(div.post): # 先定位每个文章块 print(post.select_one(h2.title).text) # 再沿树向下取标题节点1.3 文本解析器 lxml文本解析器库下载pip install lxml日常推荐使用 lxml 解析器速度快并且容错性高html divtest/div soup BeautifuiSoup(html, lxml) print(lxml:, soup) # 查看解析结果1.4 BeautifulSoup 库的核心方法详解1soup.select() - 返回所有匹配元素的列表from bs4 import BeautifulSoup html div classpost h2 classtitle第一篇/h2 h2 classtitle第二篇/h2 /div soup BeautifulSoup(html, lxml) titles soup.select(h2.title) print(titles) # [h2 classtitle第一篇/h2, h2 classtitle第二篇/h2] print(len(titles)) # 2可用于 for 循环遍历2soup.select_one() - 返回匹配到的第一个元素或 Nonefrom bs4 import BeautifulSoup html div classpost h2 classtitle第一篇/h2 h2 classtitle第二篇/h2 /div soup BeautifulSoup(html, html.parser) first soup.select_one(h2.title) print(first.text) # 第一篇 nothing soup.select_one(h3) print(nothing) # 返回 None1.5 提取元素属性和文本方法作用示例.text获取元素内的所有文本soup.select_one(span).text.get(属性名)获取元素的某个属性值soup.select_one(span).get(href)[属性名]与.get(属性名‘)效果一样soup.select_one(span)[href]from bs4 import BeautifulSoup html a classlink hrefhttps://example.com span点击这里/span 去官网 /a soup BeautifulSoup(html, html.parser) a soup.select_one(a.link) # .text取元素内的【所有】文本含子元素的文本 print(a.text) # 点击这里\n去官网span 的文本也被拼进来 # .get(href)取属性值属性不存在时返回 None不报错 print(a.get(href)) # https://example.com print(a.get(target)) # None # [href]效果相同但属性不存在时抛 KeyError print(a[href]) # https://example.com # print(a[target]) # KeyError: target1.6 嵌套处理html div classitem h3 classname商品A/h3 span classprice99元/span a href/p/1链接/a /div div classitem h3 classname商品B/h3 span classprice199元/span a href/p/2链接/a /div soup BeautifulSoup(html, lxml) # 第一步select() 一次性拿到所有外层商品块 items soup.select(div.item) # 第二步循环内用 select_one() 相对当前块向下取字段 for item in items: title item.select_one(h3.name).text price item.select_one(span.price).text link item.select_one(a)[href] print(f{title} - {price} - {link}) # 输出: # 商品A - 99元 - /p/1 # 商品B - 199元 - /p/21.7 数据处理处理文本空格与换行默认空格和换行strip()处理文本切割不包含切割符号默认空格split()处理切割后文本链接.join(s.split())常见的编码错误soup BeautilfulSoup(html, lxml, encodingutf-8-sig)2、JSON数据解析2.1 JSON基础知识JSONJavaScript Object Notation是一种轻量级的数据交换格式。在大多数网站里API接口都是使用JSON数据作为返回结构为什么使用JSON数据多主要还是因为其轻量、易读、跨语言兼容性好。JSON类型Python类型示例{} 对象dict 字典{‘name’:Bob}[] 数组list 对象[1,2,3]string 对象str 字符串‘Hello, World’12 整数int 整数1212.5 浮点数float 浮点数12.5true / falseTrue / FalsetruenullNonenull2.2 JSON与Python之间的转换import json # 1. JSON字符串 - Python对象 json_str {name: Alice, age: 25, is_student: false} data json.loads(json_str) # loads load string print(type(data)) # class dict print(data[name]) # Alice print(data[age]) # 25 print(data[is_student]) # False # 2. Python对象 - JSON字符串 data { name: Bob, score: 92.5, hobbies: [读书, 跑步] } json_str json.dumps(data, ensure_asciiFalse, indent2) print(json_str)ensure_asciiFalse确保中文不被转义为\uXXXXindent2使输出格式化便于阅读。2.3 JSON文件的读写# 写入JSON文件 json.dump data {name: 测试, value: 100} with open(data.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) # 读取JSON文件 json.load with open(data.json, r, encodingutf-8) as f: loaded_data json.load(f) print(loaded_data)2.4 处理 requests 响应的JSONimport requests # requests库的Response对象有json()方法自动解析JSON resp requests.get(https://jsonplaceholder.typicode.com/posts/1) print(resp.status_code) # 200 # 如果响应是JSON格式直接用resp.json() data resp.json() print(data[title])2.5 JSON嵌套遍历data { code: 200, data: { user: { name: 李四, email: liexample.com }, orders: [ {id: 1, product: iPhone, price: 5999}, {id: 2, product: AirPods, price: 1899} ], statistics: { total_orders: 2, total_amount: 7898 } } } # 第一步逐层访问用户信息字典套字典路径 层级 print(用户名:, data[data][user][name]) # 李四 print(邮箱:, data[data][user][email]) # liexample.com # 第二步遍历订单列表字典套列表循环取每个元素 print(\n订单明细:) for order in data[data][orders]: order_id order[id] product order[product] price order[price] print(f 订单{order_id}: {product} - ¥{price}) # 输出: # 订单1: iPhone - ¥5999 # 订单2: AirPods - ¥1899 # 第三步先取子字典再访问避免重复写长路径 stats data[data][statistics] print(f总订单数: {stats[total_orders]}) # 2 print(f消费总额: ¥{stats[total_amount]}) # ¥78982.6 JSON处理数据技巧# 1. 使用get()方法安全访问避免KeyError user data.get(data, {}).get(user, {}) name user.get(name, 未知) # 如果不存在返回默认值 # 2. 列表推导式提取特定字段 prices [order[price] for order in data[data][orders]] print(所有商品价格:, prices) # 3. 条件筛选 expensive_orders [o for o in data[data][orders] if o[price] 2000] print(2000元以上的订单:, expensive_orders) # 4. 求和计算 total sum(order[price] for order in data[data][orders]) print(f消费总额: ¥{total})2.7 常见错误访问不存在的键data {name: Bob} parsed json.loads(data) # print(parsed[age]) # KeyError! # 安全做法 print(parsed.get(age, 0)) # 输出: 0resp.json不是json格式resp requests.get(https://example.com) # 返回HTML不是JSON # data resp.json() # 抛出异常 # 先检查Content-Type if application/json in resp.headers.get(Content-Type, ): data resp.json() else: print(不是JSON响应)

相关推荐

Kubernetes实战复盘:镜像构建、持久化、网络与资源配额四大基本功
Kubernetes实战复盘:镜像构建、持久化、网络与资源配额四大基本功

前段时间朋友拉我帮忙看一个线上故障:服务在Kubernetes集群里起来又崩,崩了又起,日志翻半天发现是存储目录没挂上导致初始化失败。再一查,镜像里连时区都没配,日志时间全是UTC,排查问题的时候对不上序。这还… · 2026/9/26 5:09:49

37 二叉树的最大深度
37 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2] 输出… · 2026/9/26 5:09:49

应届生做信贷分析,需要具备哪些核心能力
应届生做信贷分析,需要具备哪些核心能力

应届生应聘信贷分析岗位,核心需要财务解读、风险识别、数据处理、报告撰写、合规判断五项能力,所有能力要求均来自 2025 至 2026 年银行、消费金融、评级机构校招岗位 JD。一、信贷分析应届生的典型日常工作任务(一)审查客户经理提… · 2026/9/26 5:09:43

华为杯数学建模破局关键:问题识别优先于模型求解
华为杯数学建模破局关键:问题识别优先于模型求解

1. 为什么“华为杯”不是一场普通数学建模比赛——新手最容易误判的底层逻辑“华为杯”研究生数学建模竞赛,这个名字听起来像是一场高校内部的学术练习,但实际走进赛场就会发现:它根本不是“做几道题、写篇论文”的轻量级活动,而是… · 2026/9/26 9:40:14

Atlas 300V部署YOLOv5实战:从环境搭建到模型转换的完整指南
Atlas 300V部署YOLOv5实战:从环境搭建到模型转换的完整指南

大概半年前,我拿到一块Atlas 300V 24G加速卡,准备把团队里的一套YOLOv5检测服务从GPU环境迁移上去。当时网上关于这个卡的信息很零散,官方文档偏产品手册风格,社区讨论也不多,很多问题只能自己一点点试。这期间踩了不少… · 2026/9/26 9:40:07

嵌入式开发硬件调试全攻略:从JTAG、串口到逻辑分析仪
嵌入式开发硬件调试全攻略:从JTAG、串口到逻辑分析仪

1. 先搞清楚你在调试什么:CPU内部状态还是外部信号做嵌入式开发这几年,我越来越觉得“硬件调试”这个词被用得太宽了。很多刚入门的朋友一听到“调试”就想到仿真器、断点、单步执行,觉得只有连上JTAG/SWD才算正经调试。但实际上,… · 2026/9/26 9:40:01

CE/RE/CS/RS四大EMC测试全解析
CE/RE/CS/RS四大EMC测试全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:40:01

PDS管道设计核心流程:等级表、ISO出图与碰撞检查指引
PDS管道设计核心流程:等级表、ISO出图与碰撞检查指引

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:40:01

Access数据库写入WinCC变量:ODBC+DSN+VBS脚本实战指南
Access数据库写入WinCC变量:ODBC+DSN+VBS脚本实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:40:01

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码