Python Beautiful Soup模块使用教程详解

作者:Thunderclap_ 时间:2021-07-21 16:00:10 

一、模块简介

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.

二、方法利用

1、引入模块

# 引入
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" rel="external nofollow"  class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" rel="external nofollow"  class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" rel="external nofollow"  class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

四种解析器

Python Beautiful Soup模块使用教程详解

2、几个简单的浏览结构化数据的方法

#获取Tag,通俗点就是HTML中的一个个标签

#获取Tag,通俗点就是HTML中的一个个标签
soup.title                    # 获取整个title标签字段:<title>The Dormouse's story</title>
soup.title.name               # 获取title标签名称  :title
soup.title.parent.name        # 获取 title 的父级标签名称:head
soup.p                        # 获取第一个p标签字段:<p class="title"><b>The Dormouse's story</b></p>
soup.p['class']               # 获取第一个p中class属性值:title
soup.p.get('class')           # 等价于上面
soup.a                        # 获取第一个a标签字段
soup.find_all('a')            # 获取所有a标签字段
soup.find(id="link3")         # 获取属性id值为link3的字段
soup.a['class'] = "newClass"  # 可以对这些属性和内容等等进行修改
del bs.a['class']             # 还可以对这个属性进行删除
soup.find('a').get('id')      # 获取class值为story的a标签中id属性的值
soup.title.string             # 获取title标签的值  :The Dormouse's story

三、具体利用

1、获取拥有指定属性的标签

方法一:获取单个属性
soup.find_all('div',id="even")            # 获取所有id=even属性的div标签
soup.find_all('div',attrs={'id':"even"})    # 效果同上
方法二:
soup.find_all('div',id="even",class_="square")            # 获取所有id=even并且class=square属性的div标签
soup.find_all('div',attrs={"id":"even","class":"square"})    # 效果同上

2、获取标签的属性值

方法一:通过下标方式提取
for link in soup.find_all('a'):
   print(link['href'])        //等同于 print(link.get('href'))
方法二:利用attrs参数提取
for link in soup.find_all('a'):
   print(link.attrs['href'])

3、获取标签中的内容

divs = soup.find_all('div')        # 获取所有的div标签
for div in divs:                   # 循环遍历div中的每一个div
   a = div.find_all('a')[0]      # 查找div标签中的第一个a标签      
   print(a.string)              # 输出a标签中的内容
如果结果没有正确显示,可以转换为list列表

4、stripped_strings

去除\n换行符等其他内容 stripped_strings

divs = soup.find_all('div')
for div in divs:
   infos = list(div.stripped_strings)        # 去掉空格换行等
   bring(infos)

四、输出

1、格式化输出prettify()

prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行

markup = '<a href="http://example.com/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >I linked to <i>example.com</i></a>'
soup = BeautifulSoup(markup)
soup.prettify()
# '<html>\n <head>\n </head>\n <body>\n  <a href="http://example.com/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\n...'
print(soup.prettify())
# <html>
#  <head>
#  </head>
#  <body>
#   <a href="http://example.com/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >
#    I linked to
#    <i>
#     example.com
#    </i>
#   </a>
#  </body>
# </html>

2、get_text()

如果只想得到tag中包含的文本内容,那么可以调用 get_text() 方法,这个方法获取到tag中包含的所有文版内容包括子孙tag中的内容,并将结果作为Unicode字符串返回:

markup = '<a href="http://example.com/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >\nI linked to <i>example.com</i>\n</a>'
soup = BeautifulSoup(markup)
soup.get_text()
u'\nI linked to example.com\n'
soup.i.get_text()
u'example.com'

来源:https://blog.csdn.net/Thunderclap_/article/details/128948135

标签:Python,Beautiful,Soup
0
投稿

猜你喜欢

  • 怎样删除Git中缓存的用户名和密码

    2023-08-12 23:56:55
  • 交互设计实用指南系列(5) – 突出重点,一目了然

    2010-01-11 21:05:00
  • Python安装与基本数据类型教程详解

    2022-04-18 18:44:59
  • virtualenv隔离Python环境的问题解析

    2023-11-13 02:00:13
  • 基于python的Tkinter编写登陆注册界面

    2022-12-20 09:44:30
  • wxPython绘图模块wxPyPlot实现数据可视化

    2023-10-03 14:58:22
  • java如何使用正则表达式限制特殊字符的个数

    2023-07-25 08:53:50
  • Python序列化模块之pickle与json详解

    2023-07-08 05:48:23
  • Python页面加载的等待方式总结

    2023-07-24 23:42:30
  • python双向链表实现实例代码

    2023-05-16 09:38:54
  • FF下,用 col 隐藏表格列的方法详解!

    2008-04-02 11:35:00
  • 解决出现SoapFault (looks like we got no XML document)的问题

    2023-11-19 04:21:01
  • js和jquery判断数据类型的4种方法总结

    2023-08-25 08:49:18
  • php ios推送(代码)

    2024-03-26 14:22:34
  • YUI学习笔记(4)

    2009-03-10 18:25:00
  • 讲解Python中for循环下的索引变量的作用域

    2022-11-27 18:41:05
  • ORACLE ORA-01653: unable to extend table 的错误处理方案(oracle报错)

    2024-01-15 12:24:10
  • Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例

    2023-08-21 18:51:04
  • Dreaweaver MX 2004新功能:图片处理

    2010-09-02 12:38:00
  • Python 包含汉字的文件读写之每行末尾加上特定字符

    2022-02-01 13:13:46
  • asp之家 网络编程 m.aspxhome.com