Python中的BS4模組
阿新 • • 發佈:2018-12-04
Python中的bs4模組
bs4 模組的 BeautifulSoup 可以用來爬取html頁面的內容,配合requests庫可以用於簡單的爬蟲。
1. 獲取標籤內容
# 1. 獲取標籤內容
from bs4 import BeautifulSoup
# 構造物件
soup = BeautifulSoup(open('villa.html'), 'html.parser')
# 獲取標籤, 預設獲取找到的第一個符合的內容
print(soup.title)
print(type(soup.title))
print(soup.p)
2. 獲取標籤的屬性
from bs4 import BeautifulSoup
# 構造物件
soup = BeautifulSoup(open('villa.html'), 'html.parser')
# #獲取標籤的屬性
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('villa.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('villa.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) # # 查詢指定的標籤內容(指定的標籤)--與正則的使用 res2 = soup.find_all(re.compile(r'd+')) print(res2) # # 對於正則表示式進行編譯, 提高查詢速率; pattern = r'd.+' pattern = re.compile(pattern) print(re.findall(pattern, 'dog hello d')) # 構造物件 soup = BeautifulSoup(open('villa.html'), 'html.parser') # 詳細查詢標籤 print(soup.find_all('p', id='test2')) 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('villa.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']"))