1. 程式人生 > >python關於bs4的介紹和操作

python關於bs4的介紹和操作

Python中bs4庫的介紹和使用

1.bs4的介紹:

   bs4是一個可以從HTML或XML檔案中提取資料並且對於HTML/XML資料的篩選的Python庫. 可以很好的分析和篩選HTML/XML這樣的標記文件中的指定規則資料在資料篩選過程中其基礎技術是通過封裝HTML DOM樹實現的一種DOM操作,通過載入網頁文件物件的形式,從文件物件樹模型中獲取目標資料。BeautifulSoup操作簡單易於上手,在很多對於資料篩選效能要求並不是特別苛刻的專案中經常使用,目前市場流行的操作版本是BeautifulSoup4,經常稱BS4.

2.bs4的優缺點:

   優點: 操作簡單沒有複雜的結構要求,通過提供面向物件的操作方式將文件物件中的各種節點、標籤、屬性、內容等等都封裝成了python中物件的屬性,在查詢操作過程中,通過呼叫指定的函式直接進行資料匹配檢索操作,非常的簡單非常的靈活。對html及xml檔案的處理效率高。
   缺點:因為BeautifulSoup對於網頁文件的程式碼解析是全部解析所以比其他的網頁程式碼處理庫佔用了更大的記憶體,對空間的佔用比較多。

3.bs4的具體操作

   BS4會將html文件物件轉換為python可以識別的四種物件:
Tag: 標籤物件
NavigableString : 字元內容操作物件
BeautifulSoup: 文件物件
Comment:

1. 獲取標籤內容

from bs4 import BeautifulSoup

構造物件

soup = BeautifulSoup(open(‘westos.html’), ‘html.parser’)

獲取標籤, 預設獲取找到的第一個符合的內容

print(soup.title)
print(type(soup.title))
print(soup.p)

#2. 獲取標籤的屬性
print(soup.p.attrs)

獲取標籤指定屬性的內容

print(soup.p[‘id’])
print(soup.p[‘class’])
print(soup.p[‘style’])

對屬性進行修改

soup.p[‘id’] = ‘modifyid’
print(soup.p)
print(type(soup.p))

3. 獲取標籤的文字內容

from bs4 import BeautifulSoup

構造物件

soup = BeautifulSoup(open(‘westos.html’), ‘html.parser’)
print(dir(soup.title))
print(soup.title.text)
print(soup.title.string)
print(

soup.title.name)
print(soup.head.title.string)

4. 操作子節點

構造物件

soup = BeautifulSoup(open(‘westos.html’), ‘html.parser’)
print(soup.head.contents)
print(soup.head.children)
for el in soup.head.children:
print(’—>’, el)

5.面向物件的匹配

# 查詢指定的標籤內容(指定的標籤)

res1 = soup.find_all(‘p’)

print(res1)

# 查詢指定的標籤內容(指定的標籤)–與正則的使用

res1 = soup.find_all(re.compile(r’d+’))
print(res1)

# 對於正則表示式進行編譯, 提高查詢速率;

pattern = r’d.+’
pattern = re.compile(pattern)
print(re.findall(pattern, ‘dog hello d’))

import re
from bs4 import BeautifulSoup

構造物件

soup = BeautifulSoup(open(‘westos.html’), ‘html.parser’)

詳細查詢標籤

print(soup.find_all(‘p’, id=‘test1’))
print(soup.find_all(‘p’, id=re.compile(r’test\d{1}’)))
print(soup.find_all(‘p’, class_=“class1”))
print(soup.find_all(‘p’, class_=re.compile(r’class\d{1}’)))

查詢多個標籤

print(soup.find_all([‘p’, ‘div’]))
print(soup.find_all([re.compile(’^d’), re.compile(‘p’)]))

內容的匹配

print(soup.find_all(text=‘文章標題’))
print(soup.find_all(text=re.compile(‘標題’)))
print(soup.find_all(text=[re.compile(‘標題’), ‘Title’]))

6.CSS匹配

import re
from bs4 import BeautifulSoup

構造物件

soup = BeautifulSoup(open(‘westos.html’), ‘html.parser’)

CSS常見選擇器: 標籤選擇器(div), 類選擇器(.class1), id選擇器(#idname), 屬性選擇器(p[type=“text”])

標籤選擇器(div)

res1 = soup.select(“p”)
print(res1)

類選擇器(.class1)

res2 = soup.select(".class2")
print(res2)

id選擇器(#idname)

res3 = soup.select("#test1")
print(res3)

屬性選擇器(p[type=“text”])

print(soup.select(“p[id=‘test1’]”))
print(soup.select(“p[‘class’]”))