BeautifulSoup4的学习

Posted 离落想AC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup4的学习相关的知识,希望对你有一定的参考价值。

BeautifulSoup4

1、BeautifulSoup4主要解析器,以及优缺点
在这里插入图片描述
2、BeautifulSoup4简单使用

假设有这样一个html,具体内容如下:

<!DOCTYPE html>
<html>
<head>
    <meta content="text/html;charset=utf-8" http-equiv="content-type" />
    <meta content="IE=Edge" http-equiv="X-UA-Compatible" />
    <meta content="always" name="referrer" />
    <link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css" />
    <title>百度一下,你就知道 </title>
</head>
<body link="#0000cc">
  <div id="wrapper">
    <div id="head">
        <div class="head_wrapper">
          <div id="u1">
            <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻 </a>
            <a class="mnav" href="https://www.hao123.com" name="tj_trhao123">hao123 </a>
            <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图 </a>
            <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频 </a>
            <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧 </a>
            <a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="display: block;">更多产品 </a>
          </div>
        </div>
    </div>
  </div>
</body>
</html>

创建beautifulsoup4对象:

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./百度.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser") # 定义bs为html文件而且这个html文件是html类型的。
print(bs.prettify()) # 格式化html结构

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.title) # 获取title标签的名称

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.title.name) # 获取title的name

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.title.string) # 获取title标签里的内容

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.head) #获取head标签的所有内容

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.div)  # 获取第一个div标签中的所有内容

效果实现:

在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.div["id"]) # 获取第一个div标签的id的值

在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.a) #获取第一个a标签的内容

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.find_all("a")) # 获取所有的a标签

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
print(bs.find(id="u1")) # 获取id="u1"

效果实现:

在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
for item in bs.find_all("a"):
    print(item.get("href")) # 获取所有的a标签,并遍历打印a标签中的href的值

效果实现:
在这里插入图片描述

from bs4 import BeautifulSoup #导入BeautifulSoupbao包
file = open('./baidu.html', 'rb')   #定义一个file 为打开刚才的html文件。
html = file.read()   #定义html为file的读取
bs = BeautifulSoup(html,"html.parser")  # 定义bs为html文件而且这个html文件是html类型的。
for item in bs.find_all("a"):
    print(item.get_text())

效果实现:

在这里插入图片描述

3、BeautifulSoup4四大对象种类

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

Tag
NavigableString
BeautifulSoup
Comment

① Tag

Tag通俗点讲就是HTML中的一个个标签,例如:

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
# 获取title标签的所有内容
print(bs.title) 
# 获取head标签的所有内容
print(bs.head) 
# 获取第一个a标签的所有内容
print(bs.a) 
# 类型
print(type(bs.a))

效果实现:
在这里插入图片描述

我们可以利用 soup 加标签名轻松地获取这些标签的内容,这些对象的类型是bs4.element.Tag。但是注意,它查找的是在所有内容中的第一个符合要求的标签。

对于 Tag,它有两个重要的属性,是 name 和 attrs:

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
# [document] #bs 对象本身比较特殊,它的 name 即为 [document]
print(bs.name) 
# head #对于其他内部标签,输出的值便为标签本身的名称
print(bs.head.name) 
# 在这里,我们把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。
print(bs.a.attrs) 
#还可以利用get方法,传入属性的名称,二者是等价的
print(bs.a['class']) # 等价 bs.a.get('class')
# 可以对这些属性和内容等等进行修改
bs.a['class'] = "newClass"
print(bs.a) 
# 还可以对这个属性进行删除
del bs.a['class'] 
print(bs.a)

效果实现:
在这里插入图片描述

② NavigableString

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可,例如:

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser")
 
print(bs.title.string) 
print(type(bs.title.string))

效果实现:
在这里插入图片描述

③ BeautifulSoup

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

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read()
 
bs = BeautifulSoup(html,"html.parser") 
print(type(bs.name)) 
print(bs.name) 
print(bs.attrs)

效果实现:
在这里插入图片描述

④ Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") 
print(bs.a)
 #此时不能出现空格和换行符,a标签如下:
 #<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>
print(bs.a.string) # 新闻
print(type(bs.a.string)) # <class 'bs4.element.Comment'>

效果实现:
在这里插入图片描述

以上是关于BeautifulSoup4的学习的主要内容,如果未能解决你的问题,请参考以下文章

BeautifulSoup4文档示例不起作用

BeautifulSoup4的学习

BeautifulSoup4的find_all()和select(),简单爬虫学习

python3+beautifulSoup4.6抓取某网站小说基础功能设计

[技术博客] BeautifulSoup4分析网页

[技术博客] BeautifulSoup4分析网页