摘要:前面兩篇介紹的是的基本對象類型和文檔樹的遍歷本篇介紹的文檔搜索搜索文檔樹主要使用兩個方法和是用于搜索節(jié)點中所有符合過濾條件的節(jié)點那么它支持哪些過濾器呢過濾器的類型字符串正則表達式列表方法字符串查找文檔中所有的標簽正則表達式找出所有以開頭的標
前面兩篇介紹的是 Beautiful Soup 4 的基本對象類型和文檔樹的遍歷, 本篇介紹 Beautiful Soup 4 的文檔搜索
搜索文檔樹主要使用兩個方法 find() 和 find_all()
find_all():find_all 是用于搜索節(jié)點中所有符合過濾條件的節(jié)點
那么它支持哪些過濾器呢?
過濾器的類型:字符串
正則表達式
列表
True
方法
字符串:
查找文檔中所有的標簽
soup.find_all("b")
正則表達式:
找出所有以b開頭的標簽
import re for tag in soup.find_all(re.compile("^b")): print(tag.name)
列表:
soup.find_all(["a", "b"])
True:
True 可以匹配任何值, 但是不會返回字符串節(jié)點
for tag in soup.find_all(True): print(tag.name)
方法:
可以定義一個方法, 方法只接受一個元素參數(shù), 如果這個方法返回 True 表示當前元素匹配并且被找到, 如果不是則反回 False
這里是官方文檔上面的例子:
下面代碼找到所有被文字包含的節(jié)點內(nèi)容
from bs4 import NavigableString def surrounded_by_strings(tag): return (isinstance(tag.next_element, NavigableString) and isinstance(tag.previous_element, NavigableString)) for tag in soup.find_all(surrounded_by_strings): print tag.namefind_all 的方法原型:
find_all( name , attrs , recursive , text , **kwargs )
name 參數(shù):
name 參數(shù)可以查找所有名字為 name 的 tag, 字符串對象會被自動忽略掉
soup.find_all("p") 查找所有的 p 標簽
keyword 參數(shù):
soup.find_all(id="link2",class_="title") , 這個將會查找到同時滿足這兩個屬性的標簽,這里的class必須用class_傳入?yún)?shù),因為class是python中的關(guān)鍵詞
有些屬性不能通過以上方法直接搜索,比如html5中的data-*屬性,不過可以通過attrs參數(shù)指定一個字典參數(shù)來搜索包含特殊屬性的標簽
data_soup.find_all(attrs={"data-foo": "value"})
text 參數(shù):
通過 text 參數(shù)可以搜索文檔中的字符串內(nèi)容, 與 name 參數(shù)的可選值一樣, text 參數(shù)接受 字符串 , 正則表達式 , 列表, True
soup.find_all("a", text="Elsie")
limit 參數(shù):
find_all() 方法返回全部的搜索結(jié)構(gòu), 如果文檔樹很大那么搜索會很慢, 如果我們不需要全部結(jié)果, 可以使用 limit 參數(shù)限制返回結(jié)果的數(shù)量, 效果與SQL中的limit關(guān)鍵字類似
soup.find_all("a", limit=2)
recursive 參數(shù):
調(diào)用tag的 find_all() 方法時, Beautiful Soup 會檢索當前 tag 的所有子孫節(jié)點,如果只想搜索 tag 的直接子節(jié)點, 可以使用參數(shù) recursive=False
soup.html.find_all("title", recursive=False)find():
find( name , attrs , recursive , text , **kwargs )
find_all() 方法將返回文檔中符合條件的所有 tag, 盡管有時候我們只想得到一個結(jié)果, 比如文檔中只有一個標簽,那么使用 find_all() 方法來查找標簽就不太合適, 使用 find_all 方法并設(shè)置 limit=1 參數(shù)不如直接使用 find() 方法, 下面兩行代碼是等價的:
soup.find_all("title", limit=1) soup.find("title")
唯一的區(qū)別是 find_all() 方法的返回結(jié)果是值包含一個元素的列表, 而 find() 方法直接返回結(jié)果
find_all() 方法沒有找到目標是返回空列表, find() 方法找不到目標時, 返回 None
CSS選擇器:Beautiful Soup支持大部分的CSS選擇器:
soup.select("body a") soup.select("html head title") soup.select("p > #link1") soup.select(".sister")
更多詳細用法戳: 官方文檔 css 選擇器
參考自 Beautiful Soup 4 官方文檔.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42569.html
摘要:本次介紹使用對文檔樹的遍歷。要注意的點在這里沒有屬性,因為它是同級節(jié)點中的第一個。字符串不是兄弟節(jié)點因為它們的父節(jié)點不同。和通過和的迭代器可以向前或向后訪問文檔的解析內(nèi)容。 上一篇文章介紹了 BeautifulSoup 的安裝以及基本對象類型。 本次介紹使用 bs4 對 HTML 文檔樹的遍歷。 先把本文用到的例子貼上: str = bs4 test bs4 test ...
摘要:官方解釋如下提供一些簡單的式的函數(shù)用來處理導航搜索修改分析樹等功能。廢話不多說,我們來試一下吧安裝目前已經(jīng)停止開發(fā),推薦在現(xiàn)在的項目中使用,不過它已經(jīng)被移植到了,也就是說導入時我們需要。 上一節(jié)我們介紹了正則表達式,它的內(nèi)容其實還是蠻多的,如果一個正則匹配稍有差池,那可能程序就處在永久的循環(huán)之中,而且有的小伙伴們也對寫正則表達式的寫法用得不熟練,沒關(guān)系,我們還有一個更強大的工具,叫Be...
摘要:文檔寫得很清楚,也有中文版,你只要看了最初的一小部分,就可以在代碼中派上用場了。 關(guān)于爬蟲的案例和方法,我們已講過許多。不過在以往的文章中,大多是關(guān)注在 如何把網(wǎng)頁上的內(nèi)容抓取下來 。今天我們來分享下,當你已經(jīng)把內(nèi)容爬下來之后, 如何提取出其中你需要的具體信息 。 網(wǎng)頁被抓取下來,通常就是 str 字符串類型的對象 ,要從里面尋找信息,最直接的想法就是直接通過字符串的 find 方法 ...
摘要:先打開花千骨小說的目錄頁,是這樣的。網(wǎng)頁結(jié)構(gòu)分析首先,目錄頁左上角有幾個可以提高你此次爬蟲成功后成就感的字眼暫不提供花千骨全集下載。打開盤查看花千骨文件。 知識就像碎布,記得縫一縫,你才能華麗麗地亮相。 1.Beautiful Soup 1.Beautifulsoup 簡介 此次實戰(zhàn)從網(wǎng)上爬取小說,需要使用到Beautiful Soup。Beautiful Soup為python的...
摘要:如果一個僅有一個子節(jié)點那么這個也可以使用方法輸出結(jié)果與當前唯一子節(jié)點的結(jié)果相同。如果標簽里面只有唯一的一個標簽了,那么也會返回最里面的內(nèi)容。 文章來源[Python爬蟲利器二之Beautiful Soup的用法 | 靜覓](http://cuiqingcai.com/1319.html Beautiful Soup的用法 創(chuàng)建 Beautiful Soup 對象 首先必須要導入 bs4...
閱讀 3653·2021-10-11 10:58
閱讀 2245·2021-10-08 10:05
閱讀 2024·2021-09-27 13:34
閱讀 3558·2019-08-30 15:53
閱讀 2723·2019-08-30 14:02
閱讀 3551·2019-08-29 16:55
閱讀 614·2019-08-29 15:41
閱讀 1062·2019-08-29 15:23