首页 > 编程语言 >【Python】Beautiful Soup

【Python】Beautiful Soup

时间:2023-05-06 09:35:07浏览次数:51  
标签:Beautiful story name Soup Python 标签 soup print find

简介

  • Beautiful Soup 对象 我全部使用soup表示;
  • Beautiful Soup 简介:
    简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。

1、创建Beautiful Soup 对象

1.1 soup.prettify()

from bs4 import BeautifulSoup
html_content = """  
<html><head><title>The Dormouse's story</title></head>  
<body>  
<p class="title" name="dromouse"><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" class="sister" id="link1"><!-- Elsie --></a>,  
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and  
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;  
and they lived at the bottom of a well.</p>  
<p class="story">...</p>  
"""
#使用html5lib 解释器解释html_conten的内容
soup = BeautifulSoup(html_content,"html5lib")

# 格式化输出html
print(soup.prettify())

该方法是将html进行格式化,输出的内容就是格式化后的html代码。
image.png

1.2 soup.标签名

# 输出第一个 title 标签
print(soup.title)
#<title>The Dormouse's story</title>
# 输出第一个 p 标签
print(soup.p)
# <p class="title" name="dromouse"><b>The Dormouse's story</b></p>

1.3 soup.标签名.name

# 输出第一个 title 标签的标签名称
print(soup.title.name)
# title

# 输出第一个 p 标签的标签名称
print(soup.p.name)
# p

1.4 soup.标签名.string

# 输出第一个 title 标签的包含内容
print(soup.title.string)
# The Dormouse's story

# 输出第一个 p 标签的包含内容
print(soup.p.string)
# The Dormouse's story

1.5 soup.标签名.parent.name

# 输出第一个 title 标签的父标签的标签名称
print(soup.title.parent.name)
# head

# 输出第一个 title 标签的父标签的标签名称
print(soup.p.parent.name)
# body

1.6 soup.标签名['属性名']

# 输出第一个 p 标签的 class 属性内容
print(soup.p['class'])
# ['title']
# 输出第一个 a 标签的  href 属性内容
print(soup.a['href'])
# http://example.com/elsie

1.7 修改、删除、添加soup的属性

#操作方法与字典一样 
# 修改第一个 a 标签的href属性为 http://www.baidu.com/
soup.a['href'] = 'http://www.baidu.com/'

# 给第一个 a 标签添加 name 属性
soup.a['name'] = u'百度'

# 删除第一个 a 标签的 class 属性为
del soup.a['class']

print(soup.a)
#<a href="http://www.baidu.com/" id="link1" name="百度"><!-- Elsie --></a>

1.8 soup.标签名.contents

##输出第一个 p 标签的所有子节点
print(soup.p.contents)
#[<b>The Dormouse's story</b>]

1.9 soup.find()

# 输出第一个 id 属性等于  link3 的  a 标签
print(soup.find(id="link3"))
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
# 输出第一个  a 标签
print(soup.find('a'))
# <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
#查找ID位link2的a标签的文本
find_a = soup.find('a',id='link2')
print(find_a)
# The Dormouse's story

1.10 soup.find_all()

  • 得到是一个序列,我们可以是用遍历的方式对其进行输出,可以得到它的相关属性以及文本的值;
# 输出所有的 a 标签,以列表形式显示
# print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

# 查找所有的a标签
find_all_a = soup.find_all('a')
print("查找所有的a标签")
for a_tag in find_all_a:
   print(a_tag.getText())
   print(a_tag.get('href'))


print soup.find_all("a", class_="sister")  
 
# 通过属性进行查找  
print soup.find_all("a", attrs={"class": "sister"})  
 
# 通过文本进行查找  
print soup.find_all(text="Elsie")  
print soup.find_all(text=["Tillie", "Elsie", "Lacie"])  
 
# 限制结果个数  
print soup.find_all("a", limit=2)

1.11 get_text()

#获取所有文字内容
print(soup.get_text())
'''
The Dormouse's story  
  
The Dormouse's story  
Once upon a time there were three little sisters; and their names were  
,  
Lacie and  
Tillie;  
and they lived at the bottom of a well.  
...  
'''
#获取第一个p标签的内容
print(soup.p.get_text())
# The Dormouse's story

1.12 soup.标签名.attrs

# 输出第一个  a 标签的所有属性信息
print(soup.a.attrs)
# {'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1'}

1.13 正则匹配

# 正则匹配,名字中带有b的标签
for tag in soup.find_all(re.compile(r"b")):
    print(tag.name)
"""
body
b
"""

2、四大内置对象

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Tag

  • Tag 是什么?通俗点讲就是 HTML 中的一个个标签;
  • 两个重要的属性,是 nameattrs

name

print(soup.name)
# soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称。
print(soup.a.name)
# a

attrs

print(soup.p.attrs)
#{'class': ['title'], 'name': 'dromouse'}
#在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。

#如果要获取到某个属性的值,我们可以这样:
print(soup.p['name'])
# dromouse
print(soup.p.get('name'))
# dromouse

删除、修改属性

soup.p['class']="newClass"  
print (soup.p ) 
#<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p> 

del soup.p['class']  
print soup.p  
#<p name="dromouse"><b>The Dormouse's story</b></p> 

contents[n] 获取第n个节点的内容

head = soup.find('head')  
#head = soup.head  
#head = soup.contents[0].contents[0]  
print head  
  
html = soup.contents[0]       # <html> ... </html>  
head = html.contents[0]       # <head> ... </head>  
body = html.contents[1]       # <body> ... </body>

2.2 NavigableString

string

  • 获取到标签里面的内容
# 获取到第一个p 标签的内容
print(soup.p.string)

2.3 BeautifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性来感受一下

print type(soup.name)  
#<type 'unicode'>  
print soup.name   
# [document]  
print (soup.attrs )  
#{} 空字典

2.4 Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。

我们找一个带注释的标签

print (soup.a ) 
#<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>  
print soup.a.string 
#Elsie 
print type(soup.a.string) 
#<class 'bs4.element.Comment'>

本文参考:[python BeautifulSoup库用法总结
](https://www.cnblogs.com/scios/p/8652760.html)

标签:Beautiful,story,name,Soup,Python,标签,soup,print,find
From: https://www.cnblogs.com/HelloWxl/p/17375965.html

相关文章

  • Linux下搭建Python2.7环境
    Python(英语发音:/ˈpaɪθən/),是一种面向对象、解释型计算机程序设计语言,由1989年底发明。python具有简单、易学、免费、开源、可移植性、解释性、可嵌入性等特点,是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学,因而得到了广泛应用和支持。1.Python下载Pyt......
  • Python多线程爬虫简单模板
    多线程爬虫的流程可以大致分为:(1)获取种子URL:从初始URL中抓取起始页面,解析其中的URL,并将这些URL添加到未访问的URL队列中;(2)解析下载的网页:从URL队列中取出一个URL,下载其内容,解析其中的链接,并把新的链接放入未访问的URL队列中;(3)存储爬取的数据:从URL队列中取出未访问的URL,把其中的内......
  • Python asyncore socket客户端开发基本使用
    导读asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服务器的基础结构,这篇文章主要介绍了Pythonasyncoresocket客户端开发基本使用,需要的朋友可以参考下介绍asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服......
  • python练习-简单计算器
    #*_*coding:utf8*_*#简单计算器importtkinterfromfunctoolsimportpartial#按钮输入调用defget_input(entry1,argu):#从entry窗口展示中获取输入的内容input_data=entry1.get()#合法运算符:+-*/--**//+-#------------输入合法性判断的......
  • python基础学习-文件
    """文件操作open()打开open(name,mode,encoding)name:文件名,文件所在的路径mode:文件访问模式,只读r,写入w(文件存在,从开头开始编辑,原有内容会删除,不存在,创建),追加a(文件存在,从已有内容之后进行编辑,不存在,创建)读写encoding:编码格式"""#打开文件f=open("demo.txt","r",encoding="......
  • python基础学习-字典
    """字典dict定义:元素是键值对,key不能重复,不能使用下标索引,key是除字典外其他类型,value为任意类型,可嵌套,可修改,支持for循环,不支持while循环#字面量{key:value,key:value,key:value}#定义变量变量名称={key:value,key:value,key:value}#定义空列表变量名称=dict(......
  • python基础学习-异常
    """异常:捕获异常:基本语法:try:可能发生错误的代码except:出现异常执行代码else:没异常,执行finally:无论有无异常,都执行异常具有传递性"""#捕获指定异常try:print(name)exceptNameErrorase:print("出现未定义异常")print(e)#捕获多个异常try:......
  • python基础学习-容器
    """容器的通用功能:len(容器)统计容器元素个数max(容器)统计最大元素min(容器)统计最小元素类型转换list(容器)给定容器转换为liststr(容器)给定容器转换为strtuple(容器)给定容器转换为tupleset(容器)给定容器转换set通用排序:sorted(容器,[reverse=True])......
  • gitlab--python 操作 gitlab
    安装我们可以使用python-gitlab库来操作gitlabpipinstallpython-gitlabgitlabissue查询的api:https://docs.gitlab.com/ee/api/issues.html#list-issuesgitlabissue查询的api:https://docs.gitlab.com/ee/api/issues.html#list-issues创建令牌我们需要令牌进行访问......
  • Python中的抽象类解说
    1、什么是抽象类?如果说,类是对一堆对象共同内容的抽取,那么抽象类就是对一堆类共同内容的抽取,包括:属性和方法。2、抽象类的特点(1)抽象类必须包含一个或多个抽象方法,也可以包含普通方法。(2)抽象类的抽象方法,在抽象类中并不作实现。(3)抽象类不能被实例(4)抽象类的子类要想进行实例化,必......