爬蟲 bs4模組

2022-06-20 16:57:08 字數 2892 閱讀 7584

安裝

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偽裝...