區(qū)分select()和find_all()

BeautifulSoup 的 find聚凹、find_all呵恢、select 方法

from bs4 import BeautifulSoup

lxml 以lxml形式解析html呵哨,例:BeautifulSoup(html,'lxml') # 注:html5lib 容錯率最高
find 返回找到的第一個標簽
find_all 以list的形式返回找到的所有標簽
limit 指定返回的標簽個數(shù)
attrs 將標簽屬性放到一個字典中
string 獲取標簽下的非標簽字符串(值), 返回字符串
strings 獲取標簽下的所有非標簽字符串刹前, 返回生成器毛嫉。
stripped_strings 獲取標簽下的所有非標簽字符串袱饭,并剔除空白字符川无,返回生成器。
get_text # 獲取標簽下的所有非標簽字符串,返回字符串格式
contents虑乖、children都是返回某個標簽下的直接子元素懦趋,包含字符串。 contents 返回一個列表疹味,children 返回一個生成器

select 方法和find_all極其相似

定義一個html仅叫,并使用BeautifulSoup的lxml解析

from bs4 import BeautifulSoup
html = '''
<table>
<tr class='a1'>
    <td>職位名稱</td>
    <td>職位類別</td>
    <td>時間</td>
</tr>
<tr class='a1'>
    <td><a id='test' class='test' target='_blank' >職位一</a></td>
    <td>類別一</td>
    <td>時間1</td>
</tr>
<tr class='a2'>
    <td><a id='test' class='test' target='_blank' >職位二</a></td>
    <td>類別二</td>
    <td>時間2</td>
</tr class='a3'>
<tr>
    <td><a id='test' class='test' target='_blank' >職位3</a></td>
    <td>類別3</td>
    <td>時間3</td>
</tr>
</table>
<div>
這是一個div
<p>
<!-- 這是一個注釋 -->
</p>
</div>
'''
soup = BeautifulSoup(html,'lxml') # 解析html

find_all()

獲取所有的tr標簽

find 返回找到的第一個標簽,find_all以list的形式返回找到的所有標簽

trs = soup.find_all('tr') # 返回列表
n=1
for i in trs: print('第{}個tr標簽:'.format(n)) print(i)
    n+=1

獲取第二個tr標簽

limit 可指定返回的標簽數(shù)量

trs = soup.find_all('tr',limit=2)[1]  # 從列表中獲取第二個元素糙捺,limit 獲取標簽個數(shù)
print(trs)

獲取class='a1'的tr標簽

方法一: class_

trs = soup.find_all('tr',class_='a1')
n=1
for i in trs: print('第{}個class=''a1''的tr標簽:'.format(n)) print(i)
    n+=1

方法二:attrs 將標簽屬性放到一個字典中

trs = soup.find_all('tr',attrs={'class':'a1'})
n=1
for i in trs: print('第{}個class=''a1''的tr標簽:'.format(n)) print(i)
    n+=1

提取所有id='test'且class='test'的a標簽

方法一:class_

alist = soup.find_all('a',id='test',class_='test')
n=1
for i in alist: print('第{}個id=''test''且class=''test''的a標簽:'.format(n)) print(i)
    n+=1

方法二:attrs

alist = soup.find_all('a',attrs={'id':'test','class':'test'})
n=1
for i in alist: print('第{}個id=''test''且class=''test''的a標簽:'.format(n)) print(i)
    n+=1

獲取所有a標簽的href屬性**

alist = soup.find_all('a') #方法一:通過下標獲取
for a in alist:
    href = a['href'] print(href) #方法二: 通過attrs獲取
for a in alist:
    href = a.attrs['href'] print(href)

獲取所有的職位信息(所有文本信息)

string 獲取標簽下的非標簽字符串(值), 返回字符串

注:第一個tr為標題信息诫咱,不獲取。從第二個tr開始獲取洪灯。

trs = soup.find_all('tr')[1:]
movies = [] for tr in trs:
    move = {}
    tds = tr.find_all('td')
    move['td1'] = tds[0].string  # string 取td的值
    move['td2'] = tds[1].string
    move['td3'] = tds[2].string
    movies.append(move) print(movies)

獲取所有非標記性字符

strings 獲取標簽下的所有非標簽字符串坎缭, 返回生成器。

trs = soup.find_all('tr')[1:] for tr in trs:
    infos = list(tr.strings)  # 獲取所有非標記性字符签钩,包含換行掏呼、空格
    print(infos)

獲取所有非空字符

stripped_strings 獲取標簽下的所有非標簽字符串,并剔除空白字符边臼,返回生成器哄尔。

trs = soup.find_all('tr')[1:] for tr in trs:
    infos = list(tr.stripped_strings)  # 獲取所有非空字符,不包含換行柠并、空格
    print(infos)
# stripped_strings 獲取所有職位信息
trs = soup.find_all('tr')[1:]
movies = [] for tr in trs:
    move = {}
    infos = list(tr.stripped_strings)
    move['職位'] = infos[0]
    move['類別'] = infos[1]
    move['時間'] = infos[2]
    movies.append(move) print(movies)

get_text 獲取所有職位信息

get_text 獲取標簽下的所有非標簽字符串,返回字符串格式

trs = soup.find_all('tr')[1]
text = trs.get_text() # 返回字符串格式
print(text)

select()

獲取所有tr標簽

trs = soup.select('tr') for i in trs: print('tr標簽:',i)

獲取第二個tr標簽

trs = soup.select('tr')[1] print(trs)

獲取所有class="al"的tr標簽

# 方法一:
trs = soup.select('tr.a1')  # tr標簽的class屬性
for i in trs: print(i) # 方法二:
trs = soup.select('tr[class="a1"]')  # tr標簽的class屬性
for i in trs: print(i)

提取所有a標簽的href屬性

# 方法一:
a = soup.select('a') for i in a: print(i['href']) # 方法二:
a = soup.select('a') for i in a: print(i.attrs['href'])

獲取所有的職位信息

trs = soup.select('tr') for i in trs: print(list(i.stripped_strings))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岭接,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臼予,更是在濱河造成了極大的恐慌鸣戴,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘拾,死亡現(xiàn)場離奇詭異窄锅,居然都是意外死亡,警方通過查閱死者的電腦和手機缰雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門入偷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來追驴,“玉大人,你說我怎么就攤上這事疏之〉钛” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵锋爪,是天一觀的道長丙曙。 經(jīng)常有香客問我,道長其骄,這世上最難降的妖魔是什么亏镰? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拯爽,結(jié)果婚禮上索抓,老公的妹妹穿的比我還像新娘。我一直安慰自己某抓,他們只是感情好纸兔,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布惰瓜。 她就那樣靜靜地躺著否副,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崎坊。 梳的紋絲不亂的頭發(fā)上备禀,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音奈揍,去河邊找鬼曲尸。 笑死,一個胖子當著我的面吹牛男翰,可吹牛的內(nèi)容都是我干的另患。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛾绎,長吁一口氣:“原來是場噩夢啊……” “哼昆箕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起租冠,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹏倘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顽爹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纤泵,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年镜粤,在試婚紗的時候發(fā)現(xiàn)自己被綠了捏题。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玻褪。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖公荧,靈堂內(nèi)的尸體忽然破棺而出归园,到底是詐尸還是另有隱情,我是刑警寧澤稚矿,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布庸诱,位于F島的核電站,受9級特大地震影響晤揣,放射性物質(zhì)發(fā)生泄漏桥爽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一昧识、第九天 我趴在偏房一處隱蔽的房頂上張望钠四。 院中可真熱鬧,春花似錦跪楞、人聲如沸缀去。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缕碎。三九已至,卻和暖如春池户,著一層夾襖步出監(jiān)牢的瞬間咏雌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工校焦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赊抖,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓寨典,卻偏偏與公主長得像氛雪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耸成,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354