這篇來看一下用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