BeautifulSoup

2023-05-16

代码:

from bs4 import BeautifulSoup

#一个html格式的内容
doc = ['<html><head><title>Page title</title></head>',
      '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
      '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
      '</html>']

#首先使用BeautifulSoup来解析html文档,去除除了html文档非标签节点之外的内容
soup = BeautifulSoup(''.join(doc), "lxml")
#之后使用prettify函数格式化输出
print(soup.prettify())

运行结果:

<html>
 <head>
  <title>
   Page title
  </title>
 </head>
 <body>
  <p align="center" id="firstpara">
   This is paragraph
   <b>
    one
   </b>
   .
  </p>
  <p align="blah" id="secondpara">
   This is paragraph
   <b>
    two
   </b>
   .
  </p>
 </body>
</html>

代码:

#列表数的结构

# 根节点
print("===" * 20)
print(soup.contents[0].name)

# 根节点的下一层第一个节点
print("===" * 20)
print(soup.contents[0].contents[0].name)

# 父节点
print("===" * 20)
print(soup.contents[0].contents[0].parent.name)

# 内容
print("===" * 20)
print(soup.contents[0].contents[0].contents[0].text)

# 下一层
print("===" * 20)
print(soup.contents[0].contents[0].next)

# 兄弟节点
print("===" * 20)
print(soup.contents[0].contents[0].next_sibling)
print(soup.contents[0].contents[0].next_sibling.name)
print(soup.contents[0].contents[0].next_sibling.text)

运行结果:

============================================================
html
============================================================
head
============================================================
html
============================================================
Page title
============================================================
<title>Page title</title>
============================================================
<body><p align="center" id="firstpara">This is paragraph <b>one</b>.</p><p align="blah" id="secondpara">This is paragraph <b>two</b>.</p></body>
body
This is paragraph one.This is paragraph two.

代码:

titlePage = soup.html.head.title
print("===" * 20)
print(titlePage)

# 内容
print("===" * 20)
print(titlePage.string)
print(titlePage.text)

运行结果:

============================================================
<title>Page title</title>
============================================================
Page title
Page title

代码:

# soup.find
print("===" * 20)
print(soup.find('title').text)

# soup.find_all
print("===" * 20)
print(soup.find_all('p'))
# 根据属性定位
print(soup.find_all('p', align="center"))

运行结果:

============================================================
Page title
============================================================
[<p align="center" id="firstpara">This is paragraph <b>one</b>.</p>, <p align="blah" id="secondpara">This is paragraph <b>two</b>.</p>]
[<p align="center" id="firstpara">This is paragraph <b>one</b>.</p>]

代码:

# 网页内容
test_scrapy = '''<div><p>  4月2日,记者从省财政厅了解到,通过深化预算管理制度改革,加强内控管理,加大监督检查力度,强化制度刚性约束,2017年全省“三公”经费财政拨款执行数为4.29亿元,较2012年减少2.2亿元,年均下降12.1%,有效降低了行政运行成本,财政资金使用效率和群众满意度进一步提升。</p><p>  近年来,我省坚持把严格控制“三公”经费的要求体现在年度预算中,按照只减不增的原则安排部门预算中的相关经费,从源头上加强了对全省“三公”经费的管控。加强和巩固公务用车制度改革,严控车辆购置及运行支出,在部门预算中省级部门一律不安排公务用车购置费,属公车改革保留车辆确需更新的,从公车改革取消车辆中调剂解决。</p><p>  全面推行公务卡结算制度,扩大公务卡结算范围,减少现金结算事项,加强对单位经费支付环节和报销环节的管理,明确了公务活动的支出行为、标准和范围,形成不能、不愿、不敢铺张浪费的长效机制。</p><p>  细化“三公”经费公开方案、明确公开重点,主动接受社会监督,持之以恒推进财政信息公开,并结合财政部预决算公开检查工作安排,会同财政部驻青专员办,对全省范围内“三公”经费公开情况展开全面检查,除涉密部门外,检查覆盖面达100%。(周建萍)</p><div>
'''

soup =BeautifulSoup(''.join(test_scrapy), "lxml")
print(soup.prettify())

运行结果:

<html>
 <body>
  <div>
   <p>
    4月2日,记者从省财政厅了解到,通过深化预算管理制度改革,加强内控管理,加大监督检查力度,强化制度刚性约束,2017年全省“三公”经费财政拨款执行数为4.29亿元,较2012年减少2.2亿元,年均下降12.1%,有效降低了行政运行成本,财政资金使用效率和群众满意度进一步提升。
   </p>
   <p>
    近年来,我省坚持把严格控制“三公”经费的要求体现在年度预算中,按照只减不增的原则安排部门预算中的相关经费,从源头上加强了对全省“三公”经费的管控。加强和巩固公务用车制度改革,严控车辆购置及运行支出,在部门预算中省级部门一律不安排公务用车购置费,属公车改革保留车辆确需更新的,从公车改革取消车辆中调剂解决。
   </p>
   <p>
    全面推行公务卡结算制度,扩大公务卡结算范围,减少现金结算事项,加强对单位经费支付环节和报销环节的管理,明确了公务活动的支出行为、标准和范围,形成不能、不愿、不敢铺张浪费的长效机制。
   </p>
   <p>
    细化“三公”经费公开方案、明确公开重点,主动接受社会监督,持之以恒推进财政信息公开,并结合财政部预决算公开检查工作安排,会同财政部驻青专员办,对全省范围内“三公”经费公开情况展开全面检查,除涉密部门外,检查覆盖面达100%。(周建萍)
   </p>
   <div>
   </div>
  </div>
 </body>
</html>

代码:

text = soup.find_all('p')
print(text)

print("===" * 20)
for node in text:
    print(node.text)

运行结果:

[<p>  4月2日,记者从省财政厅了解到,通过深化预算管理制度改革,加强内控管理,加大监督检查力度,强化制度刚性约束,2017年全省“三公”经费财政拨款执行数为4.29亿元,较2012年减少2.2亿元,年均下降12.1%,有效降低了行政运行成本,财政资金使用效率和群众满意度进一步提升。</p>, <p>  近年来,我省坚持把严格控制“三公”经费的要求体现在年度预算中,按照只减不增的原则安排部门预算中的相关经费,从源头上加强了对全省“三公”经费的管控。加强和巩固公务用车制度改革,严控车辆购置及运行支出,在部门预算中省级部门一律不安排公务用车购置费,属公车改革保留车辆确需更新的,从公车改革取消车辆中调剂解决。</p>, <p>  全面推行公务卡结算制度,扩大公务卡结算范围,减少现金结算事项,加强对单位经费支付环节和报销环节的管理,明确了公务活动的支出行为、标准和范围,形成不能、不愿、不敢铺张浪费的长效机制。</p>, <p>  细化“三公”经费公开方案、明确公开重点,主动接受社会监督,持之以恒推进财政信息公开,并结合财政部预决算公开检查工作安排,会同财政部驻青专员办,对全省范围内“三公”经费公开情况展开全面检查,除涉密部门外,检查覆盖面达100%。(周建萍)</p>]

   4月2日,记者从省财政厅了解到,通过深化预算管理制度改革,加强内控管理,加大监督检查力度,强化制度刚性约束,2017年全省“三公”经费财政拨款执行数为4.29亿元,较2012年减少2.2亿元,年均下降12.1%,有效降低了行政运行成本,财政资金使用效率和群众满意度进一步提升。
  近年来,我省坚持把严格控制“三公”经费的要求体现在年度预算中,按照只减不增的原则安排部门预算中的相关经费,从源头上加强了对全省“三公”经费的管控。加强和巩固公务用车制度改革,严控车辆购置及运行支出,在部门预算中省级部门一律不安排公务用车购置费,属公车改革保留车辆确需更新的,从公车改革取消车辆中调剂解决。
  全面推行公务卡结算制度,扩大公务卡结算范围,减少现金结算事项,加强对单位经费支付环节和报销环节的管理,明确了公务活动的支出行为、标准和范围,形成不能、不愿、不敢铺张浪费的长效机制。
  细化“三公”经费公开方案、明确公开重点,主动接受社会监督,持之以恒推进财政信息公开,并结合财政部预决算公开检查工作安排,会同财政部驻青专员办,对全省范围内“三公”经费公开情况展开全面检查,除涉密部门外,检查覆盖面达100%。(周建萍)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeautifulSoup 的相关文章