昨天終於學會了爬取一個豆瓣網頁了,按說今天該研究如何進行解析了。
但是,別急,要想解析網頁,就必須得先學會傳說中的 bs4 。
學之前其實還挺期待的,畢竟知道這東東是爬蟲的必備。
然而學習的過程才發現,其實自己缺少了很多網頁知識,比如 html、 css相關知識等。
但是現在再回去系統學網頁知識工程有點大,還是先跟著這個課程學,學完看看效果再說吧。
bs4中四大對象
這東東到底是啥呢?
bs4 全稱是 BeautifulSoup4,它將複雜 HTML 文檔轉換成一個複雜的樹形結構,每個節點都是 Python 對象,所有對象可以歸納為4種:Tag、NavigableString 、BeautifulSoup、Comment 。
上面這段話,神奇的地方在於,明明每個字我都認識,但是連起來,我竟然完全看不懂。
老師說舉個例子,就明白了,然後他直接用了一段 baidu.html 的代碼。
最令人氣憤的事情來了!
他竟然說這個文件在群裡有!
喂,我知道你是在教本科生,但是好歹多多少少也考慮下我們這些屏幕前白嫖黨的感受啊。
我們也想在 PyCharm 裡快樂的玩耍啊!
沒辦法,只能老老實實看視頻一點點理解吧。
一共沒用幾行,直接調用了 parser 方法,就解析出了百度首頁的 title。
這就是上面提到4種裡面的第一個 Tag ,標籤及內容:將找到的第一個出現的標籤及其所有內容全部拿到。
NavigableString 則是沒有標籤,只有標籤裡的內容(字符串)。
很明顯,這個功能要比第一個要常用的多。
BeautifulSoup 表示整個文檔的內容,可以當做是一個 Tag 對象。
Comment 表示註釋,是一個特殊的NavigableString,輸出的內容會不包含註釋符號,這個使用頻率是最低的。
文檔的遍歷
contents,可以獲取 Tag 的所有子節點,返回一個list。
然後我們就可以用列表索引來獲取它的某一個元素了。
其他還有 children(獲取 Tag的所有子節點)、descendants(獲取 Tag的所有子孫節點)、父節點、兄弟節點等。
完全是一種子子孫孫無窮盡也的即時感。
我都快要懷疑 Python 是愚公研究出來的了。
不過這東東瞭解即可,因為更多、更準確的功能,還得看 搜索功能了。
文檔的搜索
搜索比遍歷更為常用。
方法1:find_all ,字符串過濾,會查找與字符串完全匹配的內容。
下圖就是把所有 a 標籤包含的內容全都獲取到了。
可以配合使用:正則表達式搜索,使用 search() 方法來匹配搜索。
下圖就是將所有包含 “a”字母的標籤都會顯示出來。
這個東東聽過好多次了,老師也把他吹噓的夠嗆,期待後面對這個東東的完整學習。
還可以配合使用:傳入一個函數(方法),根據函數的要求來搜索,這個方法瞭解即可,我估計平時應該也很少會用到。
方法2:kwargs 參數,可以給定參數進行搜索。
這裡雖然仍然使用的是 find_all ,但是給定的不是規則,而是參數。
方法3:text參數,搜索文本參數。
下圖是使用正則表達式,來查找包含特定文本的內容(標籤裡的字符串)。
方法4:limit 參數,可以對得到的信息限定個數。
css選擇器:可以通過標籤查找,也可以按照id 、 類名、屬性等進行查找。
這次學的內容有點多,尤其是各種搜索方法,一下子全都湧入大腦,對我實行連續暴擊。
不過關了視頻後,仔細想想,我其實也沒必要把所有方法全部掌握的,就掌握自己好用的、自己熟悉的就好了,比如 find_all 、css選擇器 這倆,我估計沒準就夠用了。
不知道這想法對不對呢?