[Python]BeautifulSoup 4 notes

BS4

BeautifulSoup是用來(lái)從HTML or XML中提取數(shù)據(jù)的Python lib。BeautifulSoup將文檔轉(zhuǎn)化為樹(shù)形結(jié)構(gòu)(DOM)葬项,每個(gè)節(jié)點(diǎn)都是下述四種類型的Python對(duì)象:

  1. BeautifulSoup <class 'bs4.BeatifulSoup'>
  2. Tag <class 'bs4.element.Tag'>
  3. NavigableString <class 'bs4.element.NavigableString'>
  4. Comment <class 'bs4.element.Comment'>

從集合角度理解以上4中類的關(guān)系(類概念上并不準(zhǔn)確)

  • BeautifulSoup 為全集(將Document以入?yún)魅肷葿eautifulSoup object)泞当, 包含 Tag子集
  • Tag 包含 NavigableString 子集
  • Comment 為 NavigableString 特殊集合

Usage

BeautifulSoup的第一個(gè)入?yún)⑹荄ocument,第二個(gè)入?yún)⒅付―ocument parser 類型.

from bs4 import BeautifulSoup
import requests, re

url = 'http://m.kdslife.com/club/'
# get whole HTTP response
response = requests.get(url)
# args[0] is HTML document, args[1] select LXML parser. returned BeautifulSoup object
soup = BeautifulSoup( response.text, 'lxml')
print soup.name
# [document]'
print type(soup)
# <class 'bs4.BeatifulSoup'>

Sample codes for Tag objects

# BeutifulSoup --> Tag 
# get the Tag object(title)
res = soup.title
print res
# <title>KDS Life</title>

res = soup.title.name
print res
# title

# attribules of a Tag object
res = soup.section
print type(res)
# <class 'bs4.element.Tag'>

print res['class']
# ['forum-head-hot', 'clearfix']

# All the attributes of section Tag object, returned a dict
print res.attrs
#{'class': ['forum-head-hot', 'clearfix']}

Sample codes for NavigableString object

# NavigableString object describes the string in Tag object
res = soup.title
print res.string
# KDS Life
print type(res.string)
# <class 'bs4.element.NavigableString'>

Sample codes for Comment object

# Comment, is a special NavigableString object
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup)
comment = soup.b.string
print type(comment)
# <class 'bs4.element.Comment'>

BS4 Parser

按照優(yōu)先順序自動(dòng)解析民珍,'lxml' --> 'html5lib' --> 'html.parser'


常用Tag對(duì)象方法

find_all()

find_all(name,attrs,recursive,text,**kwargs) 不解釋襟士,直接看代碼

# filter, returned a matching list
# returned [] if matching nothing
title = soup.find_all('title')
print title
#[<title>Google</title>]

res = soup.find_all('div', 'topAd')
print res

# find all the elements whose id is 'gb-main'
res = soup.find_all(id='topAd')
print res
#[<div id="topAd">...</div>]

# find all the elements with 'img' tag and 'src' attribute matching the specific pattern
res = soup.find_all('img', src=re.compile(r'^http://club-img',re.I))
print res
# [![](http://upload-images.jianshu.io/upload_images/1876246-100fdca5a06a87b5.src?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240),
#...]

select()

# css selector
# select those whose tag's id = wrapperto
res = soup.select('#wrapperto')
print res
# [<div class="swiper-wrapper clearfix" id="wrapperto"></div>]

# select those 'img' tags who have 'src' attribute
res = soup.select('img[src]')
print res
#[![](http://upload-images.jianshu.io/upload_images/1876246-e154ab8cb1175dfd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240), <im
#g src="http://club-img.kdslife.com/attach/1k0/gs/a/o41gty-1coa.png@0o_1l_600w_90q.src"/>]

# select those 'img' tags whose 'src' attribute is 
res = soup.select('img[src=http://icon.pch-img.net/kds/club_m/club/icon/user1.png]')
print res
# [![](http://upload-images.jianshu.io/upload_images/1876246-e154ab8cb1175dfd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

Other

# get_text()
markup = '<a >\n a link to <i>example.com</i>\n</a>'
soup = BeautifulSoup(markup,'lxml')
res = soup.get_text()
print res
#  a link to example.com

res = soup.i.get_text()
print res
# example.com

# .stripped_string
res = soup.stripped_strings
print list(res)
# [u'a link to', u'example.com']

最后貼上一個(gè)簡(jiǎn)單的KDS圖片爬蟲(chóng)

A KDS image spider


Note

  • BeautifulSoup進(jìn)行了編碼檢測(cè)并自動(dòng)轉(zhuǎn)為Unicode. soup.original_encoding屬性來(lái)獲取自動(dòng)識(shí)別編碼的結(jié)果。
  • Input converts to unicode, output encodes with utf-8
  • 在BS使用中嚷量,可配合 XPath expression使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陋桂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝶溶,更是在濱河造成了極大的恐慌嗜历,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秸脱,居然都是意外死亡落包,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)摊唇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咐蝇,“玉大人,你說(shuō)我怎么就攤上這事巷查∮行颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵岛请,是天一觀的道長(zhǎng)旭寿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)崇败,這世上最難降的妖魔是什么盅称? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮后室,結(jié)果婚禮上缩膝,老公的妹妹穿的比我還像新娘。我一直安慰自己岸霹,他們只是感情好疾层,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贡避,像睡著了一般痛黎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刮吧,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天湖饱,我揣著相機(jī)與錄音,去河邊找鬼杀捻。 笑死琉历,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的水醋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼彪置,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拄踪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拳魁,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惶桐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體姚糊,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贿衍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了救恨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贸辈。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肠槽,靈堂內(nèi)的尸體忽然破棺而出擎淤,到底是詐尸還是另有隱情,我是刑警寧澤秸仙,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布嘴拢,位于F島的核電站,受9級(jí)特大地震影響寂纪,放射性物質(zhì)發(fā)生泄漏席吴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一捞蛋、第九天 我趴在偏房一處隱蔽的房頂上張望孝冒。 院中可真熱鬧,春花似錦襟交、人聲如沸迈倍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啼染。三九已至,卻和暖如春焕梅,著一層夾襖步出監(jiān)牢的瞬間迹鹅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工贞言, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斜棚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓该窗,卻偏偏與公主長(zhǎng)得像弟蚀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酗失,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 爬蟲(chóng)框架 BeautifulSoup 功能BeautifulSoup是用來(lái)從HTML或XML中提取數(shù)據(jù)的Pytho...
    summer_lz閱讀 581評(píng)論 0 0
  • 對(duì)象的種類BeautifulSoup會(huì)將HTML文檔抓換成一個(gè)樹(shù)形結(jié)構(gòu), 每個(gè)節(jié)點(diǎn)都是Python對(duì)象义钉,所有對(duì)象可...
    寒劍飄零閱讀 595評(píng)論 0 1
  • 人生苦短,我用Python规肴。 起初捶闸,這篇文章是打算來(lái)寫(xiě) XPath 的夜畴,可是后來(lái)一想,我需要的僅是 XPath 的...
    Moscow1147閱讀 20,760評(píng)論 1 14
  • 技法簡(jiǎn)介:題目中含有兩個(gè)或以上概念時(shí)删壮,辨析概念內(nèi)涵和外延贪绘,確定概念的關(guān)聯(lián)。既要兼顧關(guān)系央碟,也要突出重點(diǎn)税灌。 題目:羨魚(yú)...
    DavonY閱讀 303評(píng)論 0 0
  • 《今天》 今天的瀘州白天沒(méi)有太陽(yáng) 晚上也看不到月光 一整天的淫雨霏霏 夾雜著肆意蔓延的微微秋意 冷風(fēng)爬上枝頭 不問(wèn)...
    _阿花閱讀 403評(píng)論 0 2