close

這篇來看一下用BeautifulSoup解析html的一些作法

 

通常在一個網頁的html中,想要的資訊會藏在一層層的階層中

如果在code裡面使用最原始的方法一層一層找的話,會有幾個比較不好的點:

1. code看起來不簡潔

2. 當網頁稍微改變一下結構,code就會失效

所以除了一層一層的去尋訪得到資訊,我們可以採用一些別的方式,以下就來記錄一下

 

1. 利用CSS屬性來進行獲取資訊

CSS就是層疊樣式表,可以把他當成替網頁內容增加一些屬性,好讓瀏覽器去填上對應的顏色或樣式,讓網頁看起來更美觀

我們可以利用這些屬性去拿到我們想要的資訊

比如說:

namelist = bsObj.findAll("span",  {"class":"green"})
for name in namelist:
    print(name.get_text())

沒意外的話會印出一堆人名

findAll()是一個常用的函式,使用上基本就是 findAll(tagName, tagAttributes) 

上面這個例子的意思就是要獲取在<span class="green"> </ span>之中的文字

也就是說這個網頁中"所有"符合這個條件的字串會被收集成一個list

get_text()則是會把字串的tag都消除掉(當然用name.text也可以),如果改成只有name的話就會連tag都印出來了

 

這邊也簡單介紹一下find和findAll這兩個函式:

findAll(tag, attributes, recursive, text, limit, keywords)

find(tag, attributes, recursive, text, keywords)

使用是基本只會用到前兩個參數,後面幾個就簡單介紹吧

recursive:就是表示要不要去找目標tag的子tag,在findAll裡面是預設為true的

text:就是依照這個字串去尋找想要的資訊,而不是像前面一樣用屬性

limit:就是限制要找的數量,事實上find可以當成是findAll的limit為1

keyword:可以指定對應屬性的名稱,比如說像這樣:

allText = bsObj.findAll(id="text") 

基本上等同於這樣:

allText = bsObj.findAll("", {"id" :"text"}) 

 

總之可以依照各種需求去拿到想要的資訊


另外除了前面例子中的bsObj使用findAll和find之外,我們也可以直接用tag來得到資訊:

bsObj.body.h1

這個也很好理解,就是用階層的方式去獲得資訊

 

我覺得每一篇不要寫太多好了XD

不然一次沒辦法吸收,這篇就先這樣吧XD

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 頁頁頁六滴 的頭像
    頁頁頁六滴

    人森很精彩,所以要把所有事情都記起來=ˇ=

    頁頁頁六滴 發表在 痞客邦 留言(0) 人氣()