學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

昨天終於學會了爬取一個豆瓣網頁了,按說今天該研究如何進行解析了。

但是,別急,要想解析網頁,就必須得先學會傳說中的 bs4

學之前其實還挺期待的,畢竟知道這東東是爬蟲的必備。

然而學習的過程才發現,其實自己缺少了很多網頁知識,比如 html、 css相關知識等。

但是現在再回去系統學網頁知識工程有點大,還是先跟著這個課程學,學完看看效果再說吧。

bs4中四大對象

這東東到底是啥呢?

bs4 全稱是 BeautifulSoup4,它將複雜 HTML 文檔轉換成一個複雜的樹形結構,每個節點都是 Python 對象,所有對象可以歸納為4種:Tag、NavigableString 、BeautifulSoup、Comment 。

上面這段話,神奇的地方在於,明明每個字我都認識,但是連起來,我竟然完全看不懂。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

老師說舉個例子,就明白了,然後他直接用了一段 baidu.html 的代碼。

最令人氣憤的事情來了!

他竟然說這個文件在群裡有!

喂,我知道你是在教本科生,但是好歹多多少少也考慮下我們這些屏幕前白嫖黨的感受啊。

我們也想在 PyCharm 裡快樂的玩耍啊!

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

沒辦法,只能老老實實看視頻一點點理解吧。

一共沒用幾行,直接調用了 parser 方法,就解析出了百度首頁的 title。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

這就是上面提到4種裡面的第一個 Tag ,標籤及內容:將找到的第一個出現的標籤及其所有內容全部拿到。

NavigableString 則是沒有標籤,只有標籤裡的內容(字符串)。

很明顯,這個功能要比第一個要常用的多。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

BeautifulSoup 表示整個文檔的內容,可以當做是一個 Tag 對象。

Comment 表示註釋,是一個特殊的NavigableString,輸出的內容會不包含註釋符號,這個使用頻率是最低的。

文檔的遍歷

contents,可以獲取 Tag 的所有子節點,返回一個list。

然後我們就可以用列表索引來獲取它的某一個元素了。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

其他還有 children(獲取 Tag的所有子節點)、descendants(獲取 Tag的所有子孫節點)、父節點、兄弟節點等。

完全是一種子子孫孫無窮盡也的即時感。

我都快要懷疑 Python 是愚公研究出來的了。

不過這東東瞭解即可,因為更多、更準確的功能,還得看 搜索功能了。

文檔的搜索

搜索比遍歷更為常用。

方法1:find_all ,字符串過濾,會查找與字符串完全匹配的內容。

下圖就是把所有 a 標籤包含的內容全都獲取到了。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

可以配合使用:正則表達式搜索,使用 search() 方法來匹配搜索。

下圖就是將所有包含 “a”字母的標籤都會顯示出來。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

這個東東聽過好多次了,老師也把他吹噓的夠嗆,期待後面對這個東東的完整學習。

還可以配合使用:傳入一個函數(方法),根據函數的要求來搜索,這個方法瞭解即可,我估計平時應該也很少會用到。

方法2:kwargs 參數,可以給定參數進行搜索。

這裡雖然仍然使用的是 find_all ,但是給定的不是規則,而是參數。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

方法3:text參數,搜索文本參數。

下圖是使用正則表達式,來查找包含特定文本的內容(標籤裡的字符串)。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

方法4:limit 參數,可以對得到的信息限定個數。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

css選擇器:可以通過標籤查找,也可以按照id 、 類名、屬性等進行查找。

學爬蟲的第48天,我打開bs4的大門,然後又被一腳踢了出來

這次學的內容有點多,尤其是各種搜索方法,一下子全都湧入大腦,對我實行連續暴擊。

不過關了視頻後,仔細想想,我其實也沒必要把所有方法全部掌握的,就掌握自己好用的、自己熟悉的就好了,比如 find_all 、css選擇器 這倆,我估計沒準就夠用了。

不知道這想法對不對呢?


分享到:


相關文章: