beautiful soap simple examples

本文介绍BeautifulSoup爬虫包的安装与使用方法,通过示例详细解析如何获取网页元素内容及属性,进行高效的数据抓取。
 

python下很帅气的爬虫包 - Beautiful Soup 示例 

  34879人阅读  评论(3)  收藏  举报
  分类:
 

目录(?)[+]

先发一下官方文档地址。http://www.crummy.com/software/BeautifulSoup/bs4/doc/

建议有时间可以看一下Python包的文档。


Beautiful Soup 相比其他的html解析有个非常重要的优势。html会被拆解为对象处理。全篇转化为字典和数组。

相比正则解析的爬虫,省略了学习正则的高成本。

相比xpath爬虫的解析,同样节约学习时间成本。虽然xpath已经简单点了。(爬虫框架Scrapy就是使用xpath)


安装

linux下可以执行

[plain]  view plain  copy
  1. apt-get install python-bs4  

也可以用python的安装包工具来安装

[html]  view plain  copy
  1. easy_install beautifulsoup4  
  2.   
  3. pip install beautifulsoup4  


使用简介

下面说一下BeautifulSoup 的使用。

解析html需要提取数据。其实主要有几点

1:获取指定tag的内容。

[plain]  view plain  copy
  1. <p>hello, watsy</p><br><p>hello, beautiful soup.</p>  

2:获取指定tag下的属性。

[html]  view plain  copy
  1. <a href="http://blog.csdn.net/watsy">watsy's blog</a>  
3:如何获取,就需要用到查找方法。


使用示例采用官方

[html]  view plain  copy
  1. html_doc = """  
  2. <html><head><title>The Dormouse's story</title></head>  
  3. <body>  
  4. <p class="title"><b>The Dormouse's story</b></p>  
  5.   
  6. <p class="story">Once upon a time there were three little sisters; and their names were  
  7. <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,  
  8. <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and  
  9. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;  
  10. and they lived at the bottom of a well.</p>  
  11.   
  12. <p class="story">...</p>  
  13. """  
格式化输出。
[html]  view plain  copy
  1. from bs4 import BeautifulSoup  
  2. soup = BeautifulSoup(html_doc)  
  3.   
  4. print(soup.prettify())  
  5. <html>  
  6. #  <head>  
  7. #   <title>  
  8. #    The Dormouse's story  
  9. #   </title>  
  10. #  </head>  
  11. #  <body>  
  12. #   <p class="title">  
  13. #    <b>  
  14. #     The Dormouse's story  
  15. #    </b>  
  16. #   </p>  
  17. #   <p class="story">  
  18. #    Once upon a time there were three little sisters; and their names were  
  19. #    <a class="sister" href="http://example.com/elsie" id="link1">  
  20. #     Elsie  
  21. #    </a>  
  22. #    ,  
  23. #    <a class="sister" href="http://example.com/lacie" id="link2">  
  24. #     Lacie  
  25. #    </a>  
  26. #    and  
  27. #    <a class="sister" href="http://example.com/tillie" id="link2">  
  28. #     Tillie  
  29. #    </a>  
  30. #    ; and they lived at the bottom of a well.  
  31. #   </p>  
  32. #   <p class="story">  
  33. #    ...  
  34. #   </p>  
  35. #  </body>  
  36. </html>  


获取指定tag的内容

[html]  view plain  copy
  1. soup.title  
  2. <title>The Dormouse's story</title>  
  3.   
  4. soup.title.name  
  5. # u'title'  
  6.   
  7. soup.title.string  
  8. # u'The Dormouse's story'  
  9.   
  10. soup.title.parent.name  
  11. # u'head'  
  12.   
  13. soup.p  
  14. <p class="title"><b>The Dormouse's story</b></p>  
  15.   
  16. soup.a  
  17. <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>  

上面示例给出了4个方面

1:获取tag

soup.title

2:获取tag名称

soup.title.name

3:获取title tag的内容

soup.title.string

4:获取title的父节点tag的名称

soup.title.parent.name


怎么样,非常对象化的使用吧。


提取tag属性

下面要说一下如何提取href等属性。

[html]  view plain  copy
  1. soup.p['class']  
  2. # u'title'  

获取属性。方法是

soup.tag['属性名称']

[html]  view plain  copy
  1. <a href="http://blog.csdn.net/watsy">watsy's blog</a>  
常见的应该是如上的提取联接。

代码是

[html]  view plain  copy
  1. soup.a['href']  
相当easy吧。


查找与判断

接下来进入重要部分。全文搜索查找提取.

soup提供find与find_all用来查找。其中find在内部是调用了find_all来实现的。因此只说下find_all

[html]  view plain  copy
  1. def find_all(self, name=Noneattrs={}, recursive=Truetext=None,  
  2.                  limit=None, **kwargs):  

看参数。

第一个是tag的名称,第二个是属性。第3个选择递归,text是判断内容。limit是提取数量限制。**kwargs 就是字典传递了。。

举例使用。

[html]  view plain  copy
  1. tag名称  
  2. soup.find_all('b')  
  3. # [<b>The Dormouse's story</b>]  
  4.   
  5. 正则参数  
  6. import re  
  7. for tag in soup.find_all(re.compile("^b")):  
  8.     print(tag.name)  
  9. # body  
  10. # b  
  11.   
  12. for tag in soup.find_all(re.compile("t")):  
  13.     print(tag.name)  
  14. # html  
  15. # title  
  16.   
  17. 列表  
  18. soup.find_all(["a", "b"])  
  19. # [<b>The Dormouse's story</b>,  
  20. #  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,  
  21. #  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,  
  22. #  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]  
  23.   
  24. 函数调用  
  25. def has_class_but_no_id(tag):  
  26.     return tag.has_attr('class') and not tag.has_attr('id')  
  27.   
  28. soup.find_all(has_class_but_no_id)  
  29. # [<p class="title"><b>The Dormouse's story</b></p>,  
  30. #  <p class="story">Once upon a time there were...</p>,  
  31. #  <p class="story">...</p>]  
  32.   
  33. tag的名称和属性查找  
  34. soup.find_all("p", "title")  
  35. # [<p class="title"><b>The Dormouse's story</b></p>]  
  36.   
  37. tag过滤  
  38. soup.find_all("a")  
  39. # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,  
  40. #  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,  
  41. #  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]  
  42.   
  43. tag属性过滤  
  44. soup.find_all(id="link2")  
  45. # [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]  
  46.   
  47. text正则过滤  
  48. import re  
  49. soup.find(text=re.compile("sisters"))  
  50. # u'Once upon a time there were three little sisters; and their names were\n'  

获取内容和字符串

获取tag的字符串
[html]  view plain  copy
  1. title_tag.string  
  2. # u'The Dormouse's story'  

注意在实际使用中应该使用 unicode(title_tag.string)来转换为纯粹的string对象

使用strings属性会返回soup的构造1个迭代器,迭代tag对象下面的所有文本内容
[html]  view plain  copy
  1. for string in soup.strings:  
  2.     print(repr(string))  
  3. # u"The Dormouse's story"  
  4. # u'\n\n'  
  5. # u"The Dormouse's story"  
  6. # u'\n\n'  
  7. # u'Once upon a time there were three little sisters; and their names were\n'  
  8. # u'Elsie'  
  9. # u',\n'  
  10. # u'Lacie'  
  11. # u' and\n'  
  12. # u'Tillie'  
  13. # u';\nand they lived at the bottom of a well.'  
  14. # u'\n\n'  
  15. # u'...'  
  16. # u'\n'  



获取内容
.contents会以列表形式返回tag下的节点。
[html]  view plain  copy
  1. head_tag = soup.head  
  2. head_tag  
  3. <head><title>The Dormouse's story</title></head>  
  4.   
  5. head_tag.contents  
  6. [<title>The Dormouse's story</title>]  
  7.   
  8. title_tag = head_tag.contents[0]  
  9. title_tag  
  10. <title>The Dormouse's story</title>  
  11. title_tag.contents  
  12. # [u'The Dormouse's story']  

想想,应该没有什么其他的了。。其他的也可以看文档学习使用。

总结

其实使用起主要是
[html]  view plain  copy
  1. soup = BeatifulSoup(data)  
  2. soup.title  
  3. soup.p.['title']  
  4. divs = soup.find_all('div', content='tpc_content')  
  5. divs[0].contents[0].string  
数字治理作为数字经济时代政府治理现代化的重要方向,强调利用数字技术优化政府组织运行机制、促进政务数据共享、提升公共服务效率,实现由传统行政管理向数据驱动型治理转变 2014年,国家启动“信息惠民国家试点城市建设”,选择80个城市开展试点,核心内容包括:建设政务数据平台、推动数据共享、推动“一网通办”等,是我国数字治理实践的重要探索 本文借鉴刘奥龙等(2026)的研究思路和方法,将信息惠民国家试点城市建设作为数字治理的准自然实验,衡量各城市政府数字治理,整理形成地级市信息惠民政策试点DID数据,并进一步构建省份数字治理程度指标数据,为数字治理经济效应研究提供数据支持 具体整理过程如下: 1.城市政府数字治理:采用信息惠民国家试点城市冲击来衡量各城市政府数字治理,城市若成为信息惠民国家试点城市取值为1, 表明城市推行政府数字治理,否则为0 2.省份数字治理程度:选择各省份内信息惠民国家试点城市数量占省内所有城市的比值来衡量省份整体推进数字治理的程度 一、数据介绍 数据名称:政府数字治理程度_省+地级市 数据范围:省份、地级市 时间范围:2000-2025年 样本数量:省份806条;地级市7722条 数据来源:国家发展改革委 数据说明:含信息惠民试点城市名单、省份数字治理程度、地级市DID明细数据等 二、数据指标 年份 省份 省份代码 所属地域 省内城市总数量 当年实施试点城市数量 数字治理程度 年份 省份 城市 省份代码 城市代码 所属地域 胡焕庸线 “信息惠民”试点时间 Treat Post DID 三、参考文献 [1]刘奥龙,马亦凡,高娜娜.打破创新藩篱:数字治理能否推动区域协同创新[J].山西财经大学学报,2026,48(3):26-38.
内容概要:本文以有源中点箝位(ANPC)三电平并网逆变器为研究对象,提出并构建了一套融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相控制与电网电压前馈的一体化高性能并网控制策略。通过深入分析ANPC三电平拓扑在开关损耗均衡、中点电位可控性及输出谐波低等方面的结构优势,确立了其作为大功率高质量并网系统的硬件基础。在此基础上,DPWMA调制策略有效提升等效开关频率,显著降低输出电流电压的总谐波畸变率,优化稳态电能质量;正负序分离锁相技术精准剥离电网电压中的负序扰动分量,保障电网不平衡工况下的相位同步精度与并网电流对称性;电网电压前馈控制则通过前瞻性补偿机制,突破传统闭环控制的响应滞后瓶颈,大幅提升系统在电压骤变、畸变等动态扰动下的抗扰能力与动态响应速度。研究通过搭建完整的Simulink仿真模型,在稳态对称、电网不平衡及动态切换等多种工况下进行全面验证,结果表明该复合控制策略在电能质量、运行稳定性与工况适应性方面均具有显著优越性。; 适合人群:具备电力电子、自动控制或新能源并网等相关专业背景,从事科研、工程开发或处于研究生及以上学习阶段的专业技术人员。; 使用场景及目标:①应用于光伏发电、风力发电等新能源系统的大功率并网逆变器高性能控制设计;②解决电网电压不平衡、畸变等复杂非理想工况下的并网稳定性与电能质量问题;③提升工业级并网设备的动态响应速度与运行可靠性;④为相关领域的仿真建模、控制算法开发与性能优化提供系统性的技术参考与实现方案。; 阅读建议:建议结合文中所述的Simulink仿真模型进行实践操作,重点深入理解DPWMA调制的具体实现逻辑、正负序分离锁相环的设计原理以及前馈-反馈复合控制结构的集成方法,通过设置不同工况的对比仿真实验,直观体会各项关键技术对系统整体性能的提升作用。
内容概要:本文研究了离网光伏直流微网中功率供需失衡的抑制机制,重点探讨光伏最大功率点跟踪(MPPT)技术与锂离子电池储能系统在“削峰填谷”中的协同控制策略,并通过Simulink仿真平台搭建了完整的光伏-储能-负载系统模型进行验证。系统由光伏阵列、Boost升压电路、双向DC-DC变换器及锂电池储能单元构成,通过MPPT实时捕获光伏最大输出功率,同时利用储能系统的双向充放电能力平抑功率波动,实现能量的时空转移与动态平衡。研究涵盖系统建模、控制逻辑设计与多工况仿真分析,全面验证了该协同机制在应对光照强度变化和负载突变等不确定因素时的有效性与鲁棒性,显著提升了微网在离网条件下的能量自给能力和运行稳定性。; 适合人群:具备电力电子、新能源或自动控制基础知识,从事微电网、光伏发电或储能系统相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握离网光伏直流微网的基本架构与能量管理原理;②学习MPPT算法与储能双向充放电控制的协同设计方法;③通过Simulink仿真复现并优化系统性能,应用于科研项目或工程原型开发。; 阅读建议:该资源以Simulink仿真实现为核心,注重理论与实践结合,建议读者在理解控制策略的基础上动手搭建模型,重点关注MPPT模块与储能控制模块的接口逻辑及参数整定,结合实际光照与负荷数据进行仿真测试以深化理解。
内容概要 本资源是一套完整可运行的 Qt Widgets 批量图片压缩桌面工具源码,基于 Qt5/C++ 从零开发,专为初学者设计,分步实现图片批量处理全套功能。工具支持多选单张图片、直接读取整个文件夹内所有 JPG/PNG 图像,可自定义输出图片分辨率、调节 JPG0~100 区间压缩质量,自带锁定宽高比防拉伸变形功能;批量处理完成后自动统计每张图片压缩前后文件体积,计算整体压缩缩小比例,直观展示压缩效果。 适用人群 Qt/C++ 零基础初学者,学习 QImage 图像绘图、文件目录遍历、UI 交互开发; 需要本地批量处理图片的办公、设计、自媒体从业者; 想要学习图片缩放、JPG 压缩、本地文件 IO、进度条交互的开发学习者。 使用场景 自媒体批量压缩配图,降低图片体积节省上传流量; 摄影、设计批量统一图片尺寸,批量轻量化相册图片; 程序开发学习:QFileDialog 文件选择、QDir 文件夹遍历、QImage 缩放保存、QSlider 参数联动、批量循环界面防卡顿、文件大小格式化转换全套 Qt 图像开发实战案例。 工具核心功能清单 双模式导入图片:手动多选单张图片 / 一键读取整个文件夹全部图片; 自定义输出宽高分辨率,支持锁定原始宽高比,避免图片拉伸变形; 滑块调节 JPG 压缩质量 0~100,平衡图片清晰度与文件占用大小; 自定义输出保存目录,批量生成压缩后的图片文件; 实时进度条展示处理进度,循环中刷新界面,程序不会假死卡顿; 自动统计每张图片压缩前后体积,换算 KB/MB 直观展示; 批量完成弹窗汇总:图片总数、成功数量、单张大小对比、整体压缩节省空间比例; 完整模块化代码,功能拆分清晰,每段代码附带详细注释,新手可分步拆解学习。 其他说明 开发环境:Qt Creator + Qt5.15 MSVC,Windows 平台可直接编译运行; 源码结构清晰,功能
内容概要:本文研究了基于有源中点箝位(ANPC)的三电平并网逆变器,提出了一种融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相及电网电压前馈控制的一体化高性能并网控制策略。文章首先分析了ANPC三电平逆变器的拓扑结构及其在开关损耗均衡、输出波形质量、中点电位稳定等方面的优越性,奠定了高性能并网的硬件基础。随后,重点阐述了DPWMA调制策略如何通过等效倍频效应优化输出波形、降低谐波含量;正负序分离锁相技术如何在电网不平衡工况下精准提取正序分量,保障锁相精度与并网对称性;电网电压前馈控制如何提前补偿电网扰动,提升系统的动态响应与抗扰能力。通过Simulink仿真模型对稳态、电网不平衡及动态工况进行了全面验证,结果表明该复合控制策略能显著提升并网电能质量、稳定性和工况适应性,适用于新能源并网等大功率应用场景。; 适合人群:电力电子、新能源并网、自动化及相关领域的研究生、科研人员及从事逆变器控制算法开发的工程技术人员。; 使用场景及目标:① 研究三电平ANPC逆变器的拓扑优势与控制难点;② 掌握DPWMA调制、正负序分离、电网前馈等先进控制技术的原理与协同机制;③ 解决电网不平衡、动态扰动等复杂工况下的并网稳定性问题,提升系统电能质量和鲁棒性。; 阅读建议:建议结合文中提到的Simulink仿真模型进行实践验证,重点关注控制策略在不同工况下的波形响应与性能指标变化,深入理解各模块间的耦合关系与优化逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值