Python3 爬蟲入門(三)- Beautiful Soup

bs4即Beautiful Soup 4是另一個用來解析HTML或XML文件的Python庫,不得不說Beautiful Soup這個名字取的非常合適:“美味的湯” ---- 作為湯類菜飞醉,有時(shí)候是可有可無的没咙,就像如果沒有bs4我們使用css或者xpath選擇器也能做到文檔解析缭嫡;但是如果桌上有湯蜡塌,不管是飯后喝一碗還是用來泡飯吃,都極為增色,就像bs4,它所提供的各種方法讓你在解析網(wǎng)頁的時(shí)候無所不利舒裤,將會大大的減少你的時(shí)間笤成。

Rule No.1

如果你是第一次使用bs4待德,在寫體驗(yàn)代碼的時(shí)候不要把你的測試文件命名為bs4.py狈惫,這會引起一些問題。會引起什么問題夭坪?在導(dǎo)入BeautifulSoup的時(shí)候文判,from bs4 import BeautifulSoupPython會優(yōu)先從你這個文件里導(dǎo)入。

我的筆記

bs4的官方中文文檔是:Beautiful Soup 4.2.0 文檔, 其英文文檔是4.4版本的室梅。我把4.2的中文文檔看了一遍戏仓,以下是我的筆記。

解析器

HTML解析器是Python的官方解釋器亡鼠,同時(shí)還有一個很推薦的第三方解析器叫l(wèi)xml柜去。解析器就是用來解析HTML文檔的,在你指定解析那個網(wǎng)頁內(nèi)容時(shí)拆宛,你同樣需要指定一個解析器嗓奢,這樣網(wǎng)頁就會被解析成某種格式供你之后進(jìn)行操作。你可以使用如下代碼來查看文檔被解析成了什么樣子:

from bs4.diagnose import diagnose
data = open("bad.html").read()
diagnose(data)

幾種解析器的比較(我:需要C語言庫盡然也可以是劣勢):

解析器 使用方法 優(yōu)勢 劣勢
Python標(biāo)準(zhǔn)庫 BeautifulSoup(markup, "html.parser") Python的內(nèi)置標(biāo)準(zhǔn)庫執(zhí)行速度適中文檔容錯能力強(qiáng) Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml") 速度快文檔容錯能力強(qiáng) 需要安裝C語言庫
lxml XML 解析器 BeautifulSoup(markup, ["lxml", "xml"])``BeautifulSoup(markup, "xml") 速度快唯一支持XML的解析器 需要安裝C語言庫
html5lib BeautifulSoup(markup, "html5lib") 最好的容錯性以瀏覽器的方式解析文檔生成HTML5格式的文檔 速度慢不依賴外部擴(kuò)展

一個樹形結(jié)構(gòu)

這個其實(shí)就是官方文檔目錄的一個簡化版浑厚,其實(shí)我想說的都在官方文檔里寫的很詳細(xì)了股耽,作為一篇介紹bs4的文檔我實(shí)在不知道在寫些什么了。聊以湊數(shù)吧钳幅。

  • 對象
    • tag (可以對文檔進(jìn)行修改)
    • attributes
    • 可以用unicode()轉(zhuǎn)換成Python字符串物蝙,一者便于操作,二者節(jié)省內(nèi)存
    • 特殊字符串敢艰,如注釋
  • 遍歷文檔樹
    • 子節(jié)點(diǎn)
      • tag的名字诬乞,find(), find_all()方法
      • .content和.children,這兩項(xiàng)和find系列方法有異曲同工之妙。
      • .descendants
      • .string, .strings和.stripped_strings
    • 父節(jié)點(diǎn)
      • .parent和.parents
    • 兄弟節(jié)點(diǎn)
      • .next_sibling 和.previous_sibling
      • .next_siblings 和.previous_siblings
    • 回退和前進(jìn)
      • .next_element和.previous_element
      • .next_elements和.previous_elements
      • 回退前進(jìn)和兄弟節(jié)點(diǎn)幾個方法的輸出有時(shí)候是一樣的
  • 搜索文檔樹
    • 過濾器
      • 字符串過濾
      • 正則表達(dá)式
      • 列表
      • True
      • 方法
    • find_all()
      • find_all( name , attrs , recursive , text , **kwargs )
      • name參數(shù)和keyword參數(shù)
      • 按CSS搜索震嫉,使用關(guān)鍵詞class_
      • text參數(shù)
      • limit參數(shù)
      • recursive參數(shù)
    • find系列方法
      • find_all(), find()其中后者返回前者的第一項(xiàng)森瘪,其余用法一樣
      • find_parents() 和 find_parent()
      • find_next_siblings() 和find_next_sibling()
      • find_previous_siblings() 和 find_previous_sibling()
      • find_all_next() 和 find_next()
      • find_all_previous() 和 find_previous()
    • CSS選擇器
      • soup.select("body a")
      • 直接子標(biāo)簽
      • 兄弟節(jié)點(diǎn)標(biāo)簽
      • CSS類名
      • 通過id查判斷是否存在某個屬性
      • 通過屬性的值
      • 通過語言設(shè)置
    • 修改文檔樹
      • tag
      • 修改.string
      • append()
      • new_string() 和 .new_tag()
      • insert()
      • insert_before() 和 insert_after()
      • clear()
      • extract()
      • decompose()
      • replace_with()
      • wrap()
      • unwrap()
  • 輸出
    • 格式化輸出
    • 壓縮輸出
    • get_text()
  • 解析部分文檔:SoupStrainer
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市票堵,隨后出現(xiàn)的幾起案子扼睬,更是在濱河造成了極大的恐慌,老刑警劉巖悴势,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窗宇,死亡現(xiàn)場離奇詭異,居然都是意外死亡特纤,警方通過查閱死者的電腦和手機(jī)军俊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捧存,“玉大人粪躬,你說我怎么就攤上這事〈H铮” “怎么了短蜕?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵氢架,是天一觀的道長傻咖。 經(jīng)常有香客問我,道長岖研,這世上最難降的妖魔是什么卿操? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮孙援,結(jié)果婚禮上害淤,老公的妹妹穿的比我還像新娘。我一直安慰自己拓售,他們只是感情好窥摄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著础淤,像睡著了一般崭放。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸽凶,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天币砂,我揣著相機(jī)與錄音,去河邊找鬼玻侥。 笑死决摧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掌桩,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼边锁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拘鞋?” 一聲冷哼從身側(cè)響起砚蓬,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盆色,沒想到半個月后灰蛙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隔躲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年摩梧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣旱。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡仅父,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浑吟,到底是詐尸還是另有隱情笙纤,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布组力,位于F島的核電站省容,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏燎字。R本人自食惡果不足惜腥椒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望候衍。 院中可真熱鬧笼蛛,春花似錦、人聲如沸蛉鹿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妖异。三九已至惋戏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間随闺,已是汗流浹背日川。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矩乐,地道東北人龄句。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓回论,卻偏偏與公主長得像,于是被迫代替她去往敵國和親分歇。 傳聞我的和親對象是個殘疾皇子傀蓉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容