安裝
pip3 install beautifulsoup4 # 解析html和xml,修改html和xml
import requests
from bs4 import beautifulsoup
# 文件容錯能力,不是乙個標準的html也能解析
soup=beautifulsoup(html_doc,'lxml')
print(soup.prettify())
# bs4的修改文件樹 軟體配置檔案是xml格式的
# 軟體的配置檔案
# ini:configparser
# conf
# xml:bs4
# yaml格式
遍歷文件樹
# 遍歷文件樹:即直接通過標籤名字選擇,特點是選擇速度快,但如果存在多個相同的標籤則只返回第乙個
head=soup.head
p=soup.body.p
print(head.name)
巢狀選擇
a=soup.body.a
css選擇
ret=soup.select('#my_p')
ret=soup.select('body p') # 子子孫孫
ret=soup.select('body>p') # 直接子節點(兒子)
ret=soup.select('body>p')[0].text # 直接子節點(兒子)
搜尋文件樹
find() # 只返回找到的第乙個
find_all() # 找到的所有
檢視標籤屬性
# class屬性有乙個也放到列表中
print(p.attrs)
print(p.attrs.get('class'))
print(p['class'])
print(p.get('class'))
獲取標籤內容
print(p.text) # text會取該標籤,子子孫孫的內容,拼到一起
print(p.string)# # p下的文字只有乙個時,取到,否則為none
print(p.strings)# 生成器
五種過濾器
五種過濾器: 字串、正規表示式、列表、true、方法
# 字串過濾,過濾內容是字串
a=soup.find(name='a')
res=soup.find(id='my_p')
res=soup.find(class_='story')
res=soup.find(href='')
res=soup.find(attrs=)
# 正規表示式
import re
re_b=re.compile('^b')
res=soup.find(name=re_b)
res=soup.find_all(name=re_b)
res=soup.find_all(id=re.compile('^l'))
# 列表
res=soup.find_all(name=['body','b'])
res=soup.find_all(class_=['sister','title'])
# true和false
res=soup.find_all(name=true)
# 方法(了解)
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
print(soup.find_all(has_class_but_no_id))
limit 和 recursive
limit(限制查詢的條數)
res=soup.find_all(name=true,limit=1)
recursive(recursive遞迴查詢,找子子孫孫)
res=soup.body.find_all(name='b',recursive=true)
子節點,子孫節點,父節點,兄弟節點
子節點、子孫節點
# print(soup.p.contents) #p下所有子節點
# print(soup.p.children) #得到乙個迭代器,包含p下所有子節點
# print(list(soup.p.children)) #得到乙個迭代器,包含p下所有子節點
父節點、祖先節點
# print(soup.a.parent) #獲取a標籤的父節點(只有乙個)
# print(soup.p.parent) #獲取p標籤的父節點
# print(soup.a.parents) #找到a標籤所有的祖先節點,父親的父親,父親的父親的父親...
# print(list(soup.a.parents))#找到a標籤所有的祖先節點,父親的父親,父親的父親的父親...
# print(len(list(soup.a.parents)))#找到a標籤所有的祖先節點,父親的父親,父親的父親的父親...
兄弟節點
# print(soup.a.next_sibling) #下乙個兄弟
# print(soup.a.previous_sibling) #上乙個兄弟
# print(list(soup.a.next_siblings)) #下面的兄弟們=>生成器物件
# print(list(soup.a.previous_siblings)) #上面的兄弟們=>生成器物件
爬蟲架構 bs4
方便解析html xml等格式的原始碼,快速查詢 修改等操作,節省數小時乃至更多的工作時間 官網文件 from bs4 import beautifulsoup print path beautifulsoup path 非真實網頁 html doc 夏日炎炎,要你幹嘛 print soup.hea...
bs4模組練習 爬蟲專題 7
今天,python輔助做飯。各式各樣的菜 誘人呀!廚房,蒸炒燉燜煮 燒炸煎煲滷 自從學了python,我就有乙個?想法?每週做好吃又新鮮的菜,比上面的更好吃更健康。做到其實很簡單,如果您會最基礎炒,用python找到合適的菜譜到了假日就自動傳送到郵箱。寫一段python 在每週五爬取最新出的熱門菜譜...
爬蟲 資料解析 bs4
正規表示式實現資料解析 需求 爬取糗事百科中糗圖資料 import requests headers 方式1 url img data requests.get url url,headers headers content content返回的是byte型別的資料 方式2 方式2不可以使用ua偽裝...