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

Python 解析 html

一、场景分析

假设有如下 html 文档:

写一段 python 脚本,解析出里面的数据,包括经度维度。

<div class='storelist'><ul><li lng="100.111111" lat="10.111111"><h4>联盟店1</h4><p><br />X市Y区Z街道 1000 号</p></li><li lng="101.111111" lat="11.111111"><h4>联盟店2</h4><p><br />X市Y区Z街道 1001 号</p></li><li lng="102.111111" lat="12.111111"><h4>联盟店3</h4><p><br />X市Y区Z街道 1002 号</p></li></ul>
</div>

二、步骤

1、安装 BeautifulSoup4 库

pip install bs4
或者
pip install beautifulsoup4

2、脚本内容

store.py 脚本内容如下:

from bs4 import BeautifulSoup# 官方文档:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#id14# 输入文档
input_path = r"C:\Users\Administrator\Desktop\py\html\store.html"
# 输出文档
output_path = r"C:\Users\Administrator\Desktop\py\html\data.txt"
# 以 append 追加方式打开输出文档
output_file = open(output_path, 'a', encoding='utf-8')# 打开 html 输入文档,并使用 Python 标准库 html.parser 解析成 BeautifulSoup 对象
soup = BeautifulSoup(open(input_path, 'r', encoding='utf-8'), 'html.parser')# 搜索文档树,获取到所有 li TAG 组成的数组
li_array = soup.find_all('li')# 遍历这个数组,并往输出文档输出信息
for i, li in enumerate(li_array):# print(li.contents)output_file.write('\n'+str(i+1)+'、'+li.contents[1].text)output_file.write('\n 经度:'+li['lng'])output_file.write('\n 维度:'+li['lat'])output_file.write('\n 名称:'+li.contents[1].text)output_file.write('\n 地址:'+li.contents[3].text.strip())output_file.close()

其中,contents 属性可以将 tag 的子节点以列表的方式输出:

print(li.contents)

 我们可以用列表索引来获取它的某一个元素

li.contents[1] 表示 <h4>联盟店X</h4> 获取标签里面的内容,就是 li.contents[1].text

li.contents[3] 表示 <p></p> 因为 p 后面有换行,所以用 strip() 函数去掉换行符 

不然输出结果就会变成

3、运行

py store.py

4、输出结果

1、联盟店1经度:100.111111维度:10.111111名称:联盟店1地址:X市Y区Z街道 1000 号
2、联盟店2经度:101.111111维度:11.111111名称:联盟店2地址:X市Y区Z街道 1001 号
3、联盟店3经度:102.111111维度:12.111111名称:联盟店3地址:X市Y区Z街道 1002 号

三、拥抱AI

像这种简单的脚本程序,现在都可以叫 AI (比如豆包) 帮我们写:

相关文章:

  • QT:模仿QQ界面(9.28)
  • 各种图形的打印
  • 车辆重识别(2020NIPS去噪扩散概率模型)论文阅读2024/9/27
  • 深信服校招面试总结
  • LabVIEW提高开发效率技巧----RT与FPGA模块
  • 【Linux】进程概念-2
  • PostgreSQL存储的简单总结
  • PHP安装后Apache无法运行的问题
  • 【每天学个新注解】Day 12 Lombok注解简解(十一)—@FieldDefaults(@NonFinal、@PackagePrivate)
  • C++随心记
  • Linux常用命令记录
  • (done) 声音信号处理基础知识(11) (Complex Numbers for Audio Signal Processing)
  • 重置linux后vscode无法再次使用ssh连接
  • 6.MySQL基本查询
  • Redis介绍及整合Spring
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017年终总结、随想
  • 77. Combinations
  • emacs初体验
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • jquery cookie
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 百度地图API标注+时间轴组件
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 简单实现一个textarea自适应高度
  • 删除表内多余的重复数据
  • 使用API自动生成工具优化前端工作流
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 王永庆:技术创新改变教育未来
  • 异步
  • ​卜东波研究员:高观点下的少儿计算思维
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.ajax()
  • %check_box% in rails :coditions={:has_many , :through}
  • (003)SlickEdit Unity的补全
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二)linux使用docker容器运行mysql
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Linq学习笔记
  • (转)负载均衡,回话保持,cookie
  • (自用)网络编程
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • @Conditional注解详解
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] 解题神器:Python中常用的高级数据结构