Python中bs4的soup.find()和soup.find_all()用法示例小結(jié)
一、背景
我們?cè)谑褂胮ython對(duì)網(wǎng)頁(yè)爬蟲的時(shí)候,經(jīng)常會(huì)得到一些html數(shù)據(jù),因此我們就會(huì)利用soup.find()和soup.find_all()方法來(lái)篩選出想要的數(shù)據(jù)。
二、用法
1.soup.find()
1.1利用name來(lái)查找
代碼如下:
from bs4 import BeautifulSoup html_string = """<div> <h1 class="item" id="x1">蔡x坤</h1> <ul class="item" id="x2"> <li>唱</li> <li>跳</li> <li>rap</li> <li>籃球</li> </ul> <div class="item "id='x3'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #利用name來(lái)查找 tag_list=soup.find(name="h1") print(tag_list)
結(jié)果如下:
<h1 class="item" id="x1">蔡x坤</h1>
1.2利用屬性attrs來(lái)尋找
代碼如下:
html_string = """<div> <h1 class="item" id="x1">蔡x坤</h1> <ul class="item" id="x2"> <li>唱</li> <li>跳</li> <li>rap</li> <li>籃球</li> </ul> <div class="item "id='x3'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #利用屬性attrs查找 tag_list=soup.find(attrs={"id":"x3"}) print(tag_list)
結(jié)果如下:
<div class="item" id="x3">
<span>你干嘛</span>
<a class="info" href="www.xxx.com">ikun.com</a>
</div>
1.3利用name和attrs尋找
代碼如下:
html_string = """<div> <h1 class="item" id="x1">蔡x坤</h1> <ul class="item" id="x1">我是一名練習(xí)生</ul> <ul class="item" id="x2"> <li>唱</li> <li>跳</li> <li>rap</li> <li>籃球</li> </ul> <div class="item "id='x3'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #利用name和attrs尋找 tag_list=soup.find(name="ul",attrs={"id":"x2"}) print(tag_list)
結(jié)果如下:
<ul class="item" id="x2">
<li>唱</li>
<li>跳</li>
<li>rap</li>
<li>籃球</li>
</ul>
2.soup.find_all()
2.1利用name找多個(gè)
代碼如下:
html_string = """<div> <h1 class="item" id="x1">蔡x坤</h1> <ul class="item" id="x1">我是一名練習(xí)生</ul> <ul class="item" id="x2"> <li>唱</li> <li>跳</li> <li>rap</li> <li>籃球</li> </ul> <div class="item "id='x3'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #利用name找多個(gè) tag_list=soup.find_all(name="li") for tag in tag_list: print(tag.name,tag.text)
結(jié)果如下:(輸出name和text)
li 唱
li 跳
li rap
li 籃球
2.2利用attrs找多個(gè)
代碼如下:
from bs4 import BeautifulSoup html_string = """<div> <h1 class="item" id="x1">蔡x坤</h1> <ul class="item" id="x1">我是一名練習(xí)生</ul> <ul class="item" id="x2"> <li>唱</li> <li>跳</li> <li>rap</li> <li>籃球</li> </ul> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #用attrs找多個(gè) tag_list=soup.find_all(attrs={"class":"item"}) for tag in tag_list: print(tag.name,tag.text)
結(jié)果如下:(輸出name和text)
h1 蔡x坤
ul 我是一名練習(xí)生
ul
唱
跳
rap
籃球
2.3利用recursive判斷是否遞歸尋找,默認(rèn)為True
代碼如下:(recursive=False 只找兒子)
from bs4 import BeautifulSoup html_string = """<div> <div id='x1'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> <div> <span>這是一句話</span> <span>這是一句話的一句話</span> <span>這也是一句話</span> </div> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #找兒子 tag_list1=soup.find(attrs={"id":"x1"}) for tag in tag_list1.find_all(recursive=False): print(tag)
結(jié)果如下(recursive=False 只找兒子):
<span>你干嘛</span>
<a class="info" href="www.xxx.com">ikun.com</a>
<div>
<span>這是一句話</span>
<span>這是一句話的一句話</span>
<span>這也是一句話</span>
</div>
代碼如下:(recursive=True 找子子孫孫)
from bs4 import BeautifulSoup html_string = """<div> <div id='x1'> <span>你干嘛</span> <a href="www.xxx.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class='info'>ikun.com</a> <div> <span>這是一句話</span> <span>這是一句話的一句話</span> <span>這也是一句話</span> </div> </div> </div>""" soup = BeautifulSoup(html_string, features="html.parser") #找子子孫孫 tag_list1=soup.find(attrs={"id":"x1"}) for tag in tag_list1.find_all(recursive=True): print(tag)
結(jié)果如下(recursive=True 找子子孫孫):
<span>你干嘛</span>
<a class="info" href="www.xxx.com">ikun.com</a>
<div>
<span>這是一句話</span>
<span>這是一句話的一句話</span>
<span>這也是一句話</span>
</div>
<span>這是一句話</span>
<span>這是一句話的一句話</span>
<span>這也是一句話</span>
三、案例
爬取易車網(wǎng)的車品牌為例子(本例子參考python講師武沛齊老師)
1.分析網(wǎng)頁(yè)
用chrome的無(wú)痕網(wǎng)頁(yè)打開https://car.yiche.com/并分析網(wǎng)頁(yè)
分析發(fā)現(xiàn)車牌的名字在 name="div", attrs={"class": "item-brand"}里面
2.模擬請(qǐng)求,獲取HTML文本
import requests from bs4 import BeautifulSoup # 獲取HTML文本 res = requests.get( url="https://car.yiche.com/" )
3.篩選數(shù)據(jù)
import requests from bs4 import BeautifulSoup # 獲取HTML文本 res = requests.get( url="https://car.yiche.com/" ) soup = BeautifulSoup(res.text, features="html.parser") #創(chuàng)一個(gè)列表存 result_list=[] #篩選數(shù)據(jù) tag_list = soup.find_all(name="div", attrs={"class": "item-brand"}) for tag in tag_list: result_list.append(tag.attrs["data-name"]) print(result_list)
4.結(jié)果
['奧迪', '埃安', 'AITO', '阿斯頓·馬丁', '阿維塔', '阿爾法·羅密歐', '愛馳', 'AUXUN傲旋', 'ALPINA', 'Apollo', '阿爾卑斯', 'Abarth', 'ABT', '安凱客車', '安徽獵豹', 'Arash', 'Aurus', '艾康尼克', 'Agile Automotive', 'APEX', 'ATS', 'Ariel', 'Aspark', 'ARMADILLO', 'Alpine', 'AURA', 'Aviar', 'AC Schnitzer', 'Atlis', 'AEHRA', 'Aria', 'Alpha Motor', 'AZNOM', 'AEV ROBOTICS', '阿爾特', 'AFEELA', 'ASKA', 'AKXY2', 'Alef', 'AIM', 'ATOM', '安培', '本田', '奔馳', '比亞迪', '寶馬', '別克', '保時(shí)捷', '北京', '奔騰', '寶駿', '標(biāo)致', '賓利', 'BAW北汽制造', '北京汽車', '布加迪', '博速', '北汽昌河', '奔馳卡車', '巴菲特', '霸王龍', '寶沃', '北汽瑞翔', '北汽新能源', '北汽幻速', '北奔重卡', '百智新能源', '北汽威旺', '北汽雷馳', '賓尼法利納', '比速汽車', '百度Apollo', '比德文汽車', '鉑馳', '寶騏汽車', '博世', '拜騰', '北汽泰普', '寶騰', 'BAO', '保斐利', '北汽道達(dá)', '北汽黑豹', '北京清行', '博郡汽車', 'Bowler', 'BAC', 'Bertone', 'Bollinger Motors', 'BeyonCa', 'Brabham', '比克汽車', 'Bremach', 'Bizzarrini', '寶雅', '長(zhǎng)安', '長(zhǎng)安啟源', '長(zhǎng)安歐尚', '長(zhǎng)城', '長(zhǎng)安凱程', '長(zhǎng)安跨越', '創(chuàng)維汽車', '曹操', '橙仕', '乘龍汽車', '成功汽車', '車馳汽車', '超境汽車', 'Charge Cars', '采埃孚', 'CANDELA', '車和家', 'Cupra', '長(zhǎng)江EV', 'Conquest', 'Corbellati', '昶洧', 'Czinger', 'Caterham', 'Canoo', 'Continental', '大眾', '東風(fēng)風(fēng)神', '東風(fēng)風(fēng)行', '東風(fēng)風(fēng)光', '東風(fēng)奕派', '東風(fēng)', '東風(fēng)納米', '道奇', '東風(fēng)小康', 'DS', '東南', '東風(fēng)輕型車', '東風(fēng)風(fēng)度', '大運(yùn)', '大力牛魔王', '東風(fēng)御風(fēng)', '東風(fēng)商用車', '電動(dòng)屋', '東風(fēng)富康', '滴滴', '東風(fēng)·瑞泰特', '大乘汽車', '東風(fēng)氫舟', 'Dianchè', 'De Tomaso', 'Drako', '電咖', '大迪', 'Delage', 'DEUS Automobiles', '大發(fā)', 'DAVID BROWN', '達(dá)契亞', 'Donkervoort', 'Datsun', 'dÄHLer', 'DeLorean', 'Electra Meccanica', 'Elektron', 'EdisonFuture', 'Elemental', 'E.Go', 'E-Legend', '豐田', '福特', '福田', '法拉利', '飛凡汽車', '方程豹', '飛碟汽車', '菲亞特', '福迪', 'Faraday Future', '豐田紡織', '法諾新能源', 'FOXTRON', 'Fox e-mobility', '弗那薩利', 'Frangivento', 'Fresco', 'Fisker', '輔恒汽車', '廣汽傳祺', '高合汽車', '廣汽集團(tuán)', '觀致', 'GMC', '國(guó)機(jī)智駿', '光岡', '谷歌', '國(guó)金汽車', 'GTA', '廣汽吉奧', '國(guó)吉商用車', 'G&B Design', '廣通客車', '廣汽日野', 'Gumpert', '格羅夫', 'GAZ', 'NEVS國(guó)能汽車', 'GFG Style', 'GLM', 'G-Power', 'Gemballa', 'Ginetta', 'GMA', 'GYON', 'GUNTHER WERKS', '國(guó)新新能源', '高通', '紅旗', '哈弗', '昊鉑', '海馬', '合創(chuàng)汽車', '悍馬', '恒馳', '黃海', '漢騰汽車', '華晨新日', '活越', '華梓汽車', '恒潤(rùn)汽車', '華泰', '漢龍汽車', '恒天', '華夏領(lǐng)艦', '哈飛', '華菱汽車', '華頌', 'Hyperion', 'Hennessey', '紅星汽車', '華凱', '宏遠(yuǎn)汽車', '華普', '海格', 'HOFELE', '匯眾', '毫末智行', '華騏', 'HOPIUM', 'Hispano Suiza', '華利', '霍頓', 'Hudson', 'HURTAN', 'Holon', 'iCAR汽車', 'Inferno', 'Italdesign', 'INEOS', 'Icona', 'INKAS', 'IZERA', 'IED', 'INDI', 'Indigo', '吉利汽車', '捷途', '捷達(dá)', '吉利銀河', '捷豹', '極氪', 'Jeep', 'ARCFOX極狐', '吉利幾何', '江鈴', '捷尼賽思', '金杯', '江汽集團(tuán)', '江淮瑞風(fēng)', '極石汽車', '江淮汽車', '江鈴集團(tuán)新能源', '江淮釔為', 'Polestar極星', '極越', '鈞天', '金龍', '江南汽車', '金旅', '江鈴旅居車', '九龍', '嘉遠(yuǎn)汽車', '江鈴重汽', '君馬汽車', '金冠汽車', '江鈴晶馬汽車', '金琥汽車', '吉威新能源', 'Jannarelly', '奇點(diǎn)汽車', '佳躍', '吉祥汽車', '凱迪拉克', '凱翼', '開瑞', '科尼賽克', '克蒂汽車', '開云汽車', '克萊斯勒', '科瑞斯的', '克慕勒', '凱馬汽車', 'Karlmann', '焜馳', '開沃汽車', '卡爾森', 'KTM', '凱佰赫', 'Kimera', '開利', 'Karma', '卡威', 'KHANN', '卡升', '克羅斯哈特', '路虎', '領(lǐng)克', '雷克薩斯', '理想汽車', '林肯', '零跑汽車', '勞斯萊斯', '蘭博基尼', '嵐圖汽車', '鈴木', '路特斯', '凌寶汽車', '雷諾', '獵豹汽車', '雷丁', '藍(lán)電', '拉帝', 'LUMMA', '陸風(fēng)', 'Lorinser', '菱勢(shì)汽車', '力帆汽車', '理念', '雷達(dá)汽車', 'LEVC', '蓮花汽車', '領(lǐng)途汽車', '聯(lián)合卡車', 'LG', '龍程汽車', 'LIMGENE凌際', '拉達(dá)', '萊茵汽車', '陸地方舟', '羅夫哈特', '拉共達(dá)', 'Lucid', '靈悉', '藍(lán)旗亞', '綠馳', 'LITE', '雷諾三星', '羅孚', '朗世', 'Lightyear', 'LOCAL MOTORS', '領(lǐng)志', 'LeSEE', 'Lordstown Motors', 'LUNAZ', ' LIUX ', '洛軻智能', '藍(lán)擎汽車', '馬自達(dá)', '名爵', '瑪莎拉蒂', 'MINI', '邁凱倫', '邁巴赫', '猛士', '邁莎銳', '摩登汽車', '邁越', '摩根', '敏安汽車', 'Michelin米其林', '曼', 'Mole', '邁邁', 'Manhart', 'Meyers Manx', 'MILITEM', 'MAGNA', 'Micro', 'Munro', 'Mazzanti', '美亞', 'Mahindra', 'MELKUS', 'Mobilize', 'Moke ', 'Mopar', '魅族', 'Mullen', '哪吒汽車', '納智捷', '南駿汽車', 'NamX', '諾博汽車', 'Naran', 'nanoFLOWCELL', 'Neuron EV', 'NEXT LEVEL', 'Nikola', 'Noble', 'Novitec', '歐拉', '謳歌', 'OBBIN', '歐寶', '歐鈴汽車', '歐朗', '歐聯(lián)', '帕加尼', '朋克汽車', 'Posaidon', 'Puritalia', 'Praga', 'Piëch Automotive', '佩奇奧', 'Pogea Racing', 'Project Arrow', '奇瑞', '起亞', '啟辰', '奇瑞新能源', '喬治·巴頓', '慶鈴五十鈴', '青島解放', '前途', '前晨汽車', '全球鷹', '騏鈴汽車', '奇魯汽車', '清源汽車', '輕橙時(shí)代', '日產(chǎn)', '榮威', '睿藍(lán)汽車', 'RAM', '瑞弗', '瑞馳新能源', '容大智造', 'Rezvani', '如虎', '瑞麒', '瑞騰汽車', '銳馬克', 'RIVIAN', 'Ringbrothers', 'RENOVO', 'Rinspeed', 'Radical', 'Radford', 'REVO ZERO', '深藍(lán)汽車', '上汽大通MAXUS', '三菱', '斯柯達(dá)', '斯巴魯', '思皓', 'smart', 'SWM斯威汽車', '思銘', 'SERES賽力斯', 'SONGSAN MOTORS', '陜汽重卡', '上汽輕卡', '時(shí)風(fēng)', '三一集團(tuán)', '沙龍汽車', '上汽紅巖', '斯堪尼亞', '山姆', '盛唐', 'SHELBY', '陜汽輕卡', '雙龍', '薩博', '世爵', '陜汽商用車', '上汽集團(tuán)', '上海', '賽麟', '斯太爾', '神州', '斯達(dá)泰克', '雙環(huán)', '陜汽通家', '申龍客車', '上喆', 'SSC', 'SONY', '首望', 'SVE', 'STI', 'SPIRRA', 'SCOUT', 'Spyros Panopoulos', '速達(dá)', 'Spofec', 'Sono Motors', 'Scion', 'Share2Drive', 'SIN CARS', 'Singer', '深向', 'Silence', '世極', '特斯拉', '坦克', '騰勢(shì)', '天際汽車', '泰卡特', '塔塔', '泰克魯斯·騰風(fēng)', 'Triton', 'TopCar', 'Touring Superleggera', 'Troller', 'Togg', 'Theon Design', 'Tramontana', 'TOROIDION', 'TVR', 'TECHART', '途柚汽車 ', 'THOR', '拓銳斯特 ', 'Telo', 'THK', 'TWR', '天地良心汽車', 'Ugur Sahin Design', 'Ultima', 'Uniti', 'Vinfast', 'Vega Innovations', 'VLF Automotive', 'Vanda Electric', 'VANTAS', 'VIRITECH', 'Venturi', 'Vanwall', '五菱汽車', '沃爾沃', '蔚來(lái)', '魏牌', '五十鈴', '未奧汽車', '沃爾沃卡車', '威馬汽車', '維努斯', '瓦滋', 'WALD', '威茲曼', '偉昊汽車', '濰柴歐睿', '濰柴英致', '萬(wàn)象汽車', '威麟', 'W Motors', '沃克斯豪爾', 'WayRay', '現(xiàn)代', '雪佛蘭', '星途', '小鵬', '雪鐵龍', '小米汽車', '小鵬匯天', '小跑車', '小虎', 'SRM鑫源', '新龍馬汽車', '徐工汽車', '新吉奧', 'AM曉?shī)W汽車', '西雅特', '現(xiàn)代摩比斯', '小猬汽車', '新特汽車', '星客特', '英菲尼迪', '仰望', '依維柯', '一汽解放', '云度', '一汽', '遠(yuǎn)程', '野馬汽車', '一汽解放輕卡', '馭勝', '遠(yuǎn)航汽車', '宇通客車', '野馬新能源', '運(yùn)良', '一汽凌河', '雅升汽車', 'YAMAHA', '游俠', '云雀汽車', '悠遙科技', '永源', 'IMSA英颯', '悠跑科技', '悠寶利', '銀隆新能源', '御捷', '翼刻', '裕路', '易電易行', '一汽富維', '怡亞通', '越界', '智己汽車', '智界', '眾泰', '中國(guó)重汽VGV', '中國(guó)重汽', '中興', '中華', '重汽王牌', '重汽豪曼', '知豆', '智行盒子', '自游家', '中歐房車', '智點(diǎn)汽車', '正道汽車', '中通客車', '之諾', 'Zenvo', '中植汽車', '777']
到此這篇關(guān)于Python中bs4的soup.find()和soup.find_all()用法的文章就介紹到這了,更多相關(guān)Python bs4的soup.find()和soup.find_all()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pip已經(jīng)安裝好第三方庫(kù)但pycharm中import時(shí)還是標(biāo)紅的解決方案
這篇文章主要介紹了python中pip已經(jīng)安裝好第三方庫(kù)但pycharm中import時(shí)還是標(biāo)紅的問(wèn)題,本文給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Python中json.loads和json.dumps方法中英雙語(yǔ)詳解
在Python中json.loads和json.dumps是處理JSON數(shù)據(jù)的重要方法,json.loads用于將JSON字符串解析為Python對(duì)象,而json.dumps用于將Python對(duì)象序列化為JSON字符串,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01python數(shù)字圖像處理實(shí)現(xiàn)圖像的形變與縮放
這篇文章主要為大家介紹了python數(shù)字圖像處理實(shí)現(xiàn)圖像的形變與縮放示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python pip配置國(guó)內(nèi)鏡像源的方法(永久和臨時(shí))
在使用 pip 安裝 Python 模塊時(shí),默認(rèn)的國(guó)外鏡像源可能會(huì)導(dǎo)致下載速度緩慢甚至超時(shí),為了解決這個(gè)問(wèn)題,可以使用國(guó)內(nèi)的鏡像源來(lái)加速下載,以下是常用的國(guó)內(nèi)鏡像源以及臨時(shí)和永久的配置方法,需要的朋友可以參考下2025-04-04Python3實(shí)現(xiàn)抓取javascript動(dòng)態(tài)生成的html網(wǎng)頁(yè)功能示例
這篇文章主要介紹了Python3實(shí)現(xiàn)抓取javascript動(dòng)態(tài)生成的html網(wǎng)頁(yè)功能,結(jié)合實(shí)例形式分析了Python3使用selenium庫(kù)針對(duì)javascript動(dòng)態(tài)生成的HTML網(wǎng)頁(yè)元素進(jìn)行抓取的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08對(duì)python捕獲ctrl+c手工中斷程序的兩種方法詳解
今天小編就為大家分享一篇對(duì)python捕獲ctrl+c手工中斷程序的兩種方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python?命令行參數(shù)模塊argparse的實(shí)現(xiàn)
本文主要介紹了python?命令行參數(shù)模塊argparse的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Django 導(dǎo)出項(xiàng)目依賴庫(kù)到 requirements.txt過(guò)程解析
這篇文章主要介紹了Django 導(dǎo)出項(xiàng)目依賴庫(kù)到 requirements.txt過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08