python bs4模块
bs4模块是一个可以像CSS选择器一样,对html代码进行查找,在介绍bs4模块之前,需要先对html语言进行简单介绍。
<!--
html代码由标签,属性,和文本构成
其中标签决定了被展示的文本内容的性质,如:
<h1>标题</h1> h标签:表示这部分文本是标题
<p>段落</p> p标签:表示这部分文本是段落
<a href="www.baidu.com">百度主页</a> a标签:表示这部分是一个超链接,访问的是百度首页
属性为标签增加了额外内容,比如上面a标签中的href就是a标签的属性,使该a标签可访问到百度首页
<h1 color="pink">我爱周杰伦</h1> color属性可以指定文本的颜色
<p id="1">大力滴滴滴</p> 可以自定义id来标识唯一的标签,方便css或bs4模块来查找
文本为实际展示的内容
-->
<标签 属性="值" 属性="值">
文本
</标签>
<a></a>
<!-- 由于这里不是开发前端,只了解这些html代码的知识就够用了 -->
bs4模块可以针对html代码中的标签,属性,文本进行查找,而不需要编写正则表达式,相比于re模块方便许多。
bs4模块主要使用里面的Beautifulsoup类中的find()和find_all()方法,下面对这两个方法进行一一介绍
"""
find()方法用于查找单个标签
"""
from bs4 import BeautifulSoup
html = """
<ul>
<li><a href="zhangwuji.com">张⽆忌</a></li>
<li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
<li><a href="zhubajie.com">猪⼋戒</a></li>
<li><a href="wuzetian.com">武则天</a></li>
</ul>
"""
page = BeautifulSoup(html, "html.parser")
li = page.find("li", attrs={"id": "abc"}) # 查找指定属性的标签用find("标签", attr={"属性": "值"})
print(li) # <li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
a = li.find("a") # 查找标签用find("标签")
# 查找文本用.text
print(a.text) # 周星驰
# 查找属性用.get("属性名")
print(a.get("href")) # zhouxingchi.com
"""
find_all()方法用于查找满足要求的所有标签
"""
from bs4 import BeautifulSoup
html = """
<ul>
<li><a href="zhangwuji.com">张⽆忌</a></li>
<li id="abc"><a href="zhouxingchi.com">周星驰</a></li>
<li><a href="zhubajie.com">猪⼋戒</a></li>
<li><a href="wuzetian.com">武则天</a></li>
<a href="jinmaoshiwang.com">金毛狮王</a>
</ul>
"""
page = BeautifulSoup(html, "html.parser")
li_list = page.find_all("li") # 将查找到满足要求的标签存放到迭代器中
for li in li_list:
a = li.find("a")
text = a.text
href = a.get("href")
print(text, href) # 张⽆忌 zhangwuji.com 周星驰 zhouxingchi.com 猪⼋戒 zhubajie.com 武则天 wuzetian.com
使用方法总结:
- 初始化BeautifulSoup类,输入html文本和选择"html.parser"解析器
- 查找标签使用 find() 或 find_all() 方法
- 找到标签后,要获得属性使用 .get(“属性名”) 方法
- 要获得文本,访问被查找到标签的 .text 属性