這節課來學習一下什麼是BeautifulSoup庫
功能:用於網頁的數據解析
BeautifulSoup4將複雜的HTML文檔裝換爲一個複雜的樹形結構
每個節點都是python對象,所有對象可以歸納爲以下四種:
-Tag 標籤及其第一個內容(例如:
-NavigableString 標籤裏的內容(字符串)(例如:百度一下,你就知道,爲內容)
-BeautifulSoup 整個文檔(用於整個文檔方法的訪問)
-Comment 特殊的NavigableString,輸出的內容不包含註釋
from bs4 import BeautifulSoup
file = open("./baidu.html",'rb')
html = file.read()
bs = BeautifulSoup(html,"html.parser") # 使用 html.parser解析器,解析html文檔
# 1.Tag 標籤及其第一個內容(例如:<title>百度一下,你就知道</title>,title爲標籤)
# 2.NavigableString 標籤裏的內容(字符串)(例如:百度一下,你就知道,爲內容)
# 找到第一個匹配到的標籤及其內容(瞭解)
print(bs.title)
print(bs.a)
print(bs.head)
# 找到第一個匹配到的標籤對應的內容(不打印標籤)
print(bs.title.string) # 字符串
# 找到第一個匹配到的標籤所有的屬性(不打印標籤)
print(bs.title.attrs) # 字典
# 3.BeautifulSoup 整個文檔(用於整個文檔方法的訪問)
print(bs)
print(bs.name)
print(bs.a.string)
# ----------------------------------------------------------------------(用)
# 遍歷文檔樹(更多內容請百度)
# .contents:獲取Tag的所有子節點,返回一個list
# .children:獲取Tag的所有子節點,返回一個生成器
# .descendants:獲取Tag的所有子孫節點
print(bs.head)
print('-----------------------------')
print(bs.head.contents) # 使用contents方法,以列表形式得到bs的head的內容
# 文檔的搜索
# 1.find_all():配合字符串、正則表達式、自定義函數,查找內容
# 2.kwargs 參數
# 3.text 文本參數
# 4.limit 參數
#-------------------------------------------------------------------1.find_all()
find_all('字符串'):字符串過濾,查找與字符串完全匹配的內容
t_list = bs.find_all('a') # 找到所有a標籤
print(t_list)
# 正則表達式搜索:使用search()方法匹配內容
import re
t_list = bs.find_all(re.compile("a"))
print(t_list)
# 方法:傳入一個函數(方法),根據函數要求搜索(瞭解)
def name_is_exists(tag):
return tag.has_attr('name') # 返回具有name屬性的
t_list = bs.find_all(name_is_exists)
for i in t_list:
print(i)
#-----------------------------------------------------------------------2.kwargs
t_list = bs.find_all(id="head")
t_list1 = bs.find_all(class_=True)
t_list2 = bs.find_all(id="head")
for item in t_list:
print(item)
#-----------------------------------------------------------------------3.text 文本參數
t_list = bs.find_all(text="hao123")
t_list1 = bs.find_all(text=["hao123",'地圖'])
t_list2 = bs.find_all(text=re.compile("\d")) # 用正則表達式查找包含特定文本的內容
for item in t_list:
print(item)
#-------------------- ---------------------------------------------------4.limit 參數
t_list = bs.find_all("hao123",limit=3) # 限定查找的個數
# css選擇器
bs.select('標籤')
print(bs.select('title'))
bs.select('類名')
print(bs.select('.mnav'))
bs.select('ID')
print(bs.select('#u1'))
bs.select('標籤[屬性]')
print(bs.select("a[class='bri']"))
bs.select('標籤>子標籤')
print(bs.select("head>title"))
bs.select('類名~兄弟類名')
print(bs.select(".mnav ~ .bri"))
你學會了嗎?