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的find_all()和select(),简单爬虫学习