ba4的介紹:
bs4是第三方提供的庫,,可以將網(wǎng)頁生成一個對象,這個網(wǎng)頁對象有一些函數(shù)和屬性,,可以快捷的獲取網(wǎng)頁中的內(nèi)容和標(biāo)簽
lxml的介紹
lxml是一個文件的解釋器,,python自帶的解釋器是:html.parser
import re
from bs4 import BeautifulSoup # 把網(wǎng)頁生成對象的對象拿出來 soup = BeautifulSoup(open("test.html",encoding="utf8"),"lxml") # __str__此方法作用:打印對象會把對應(yīng)的字符串打印出來 # print(soup) # 打印出來的結(jié)果是網(wǎng)頁的標(biāo)簽的字符串
#方式一. 根據(jù)標(biāo)簽進行查找,只能知道第一個標(biāo)簽 ret = soup.a
print(ret) # 輸出結(jié)果:是網(wǎng)頁中的第一個標(biāo)簽及其里邊內(nèi)容,返回的是一個標(biāo)簽對象 # 2.獲取屬性和內(nèi)容
print(soup.a.attrs) # 獲取a標(biāo)簽中的屬性,,返回的是一個關(guān)于屬性和屬性值的字典,,可以根據(jù)鍵值形式拿取屬性值
print(soup.a["href"]) # 可以如此直接獲取屬性的值
print(soup.a.text) print(soup.a.string) print(soup.a.get_text()) # 可以獲取標(biāo)簽中的內(nèi)容 # 注意:如果標(biāo)簽中還有標(biāo)簽,怎獲取標(biāo)簽內(nèi)容是獲取所有標(biāo)簽中的內(nèi)容 print(soup.div.text.replace("\t","").replace("\n","")) # 輸出內(nèi)容是:將制表符,,換行符替換為空字符串
# 方式二,,比第二種方式更加靈活,可以加(屬性限制)條件,找到指定的標(biāo)簽 # 返回的是一個a標(biāo)簽的對象 tag = soup.find("a",class_="mu") print(tag) # 輸出內(nèi)容為a標(biāo)簽對象,。 # 注意:再根據(jù)class類進行索引標(biāo)簽時,,要寫成class_形式,不能寫成class # 原因是class在python代碼中是關(guān)鍵字,,檢索時防止代碼錯誤識別,! tag1 = soup.find("a",class_= re.compile(r"^mu")) print(tag1) # 注意可以進行加正則表達式對標(biāo)簽進行篩選
print(soup.find_all("a") ) #同find()一樣拿取所有的a標(biāo)簽,返回的是一個含a標(biāo)簽對象的列表
# 方式三,,(重點)soup.select(),返回的是一個關(guān)于標(biāo)簽對象的列表 # 適用于css的樣式選擇器 tagre = soup.select(".mu") # 使用選擇器進行標(biāo)簽的篩選 print("*"*50) print(tagre) # 獲取標(biāo)簽屬性的值 print(tagre[0]["href"])
# 適用選擇器種類 # 標(biāo)簽選擇器 # 屬性選擇器 # id選擇器 # class類選擇器 # 層級選擇器 # 偽類選擇器 # 組合選擇器
# 層級選擇器(重點) # div p a 后邊的節(jié)點是前邊節(jié)點的子節(jié)點就可以 print(soup.select(".tang #nan"))
# div>p>span 后邊的節(jié)點是前邊節(jié)點的直接子節(jié)點就可以 print(soup.select(".tang>ul>li"))
#屬性選擇器(幾乎不用) print(soup.select("a[class=mu]"))
# 彩蛋:方式二和方式三組合使用 # 如: c_soup = BeautifulSoup(open("test.html",encoding="utf8"),"lxml") tag1 = c_soup.find("div",class_="tang") print("*"*50) print(tag1.select(".tang a"))
|