當前位置:編程學習大全網 - 編程語言 - Python爬蟲:想聽榜單歌曲?只需要14行代碼即可搞定

Python爬蟲:想聽榜單歌曲?只需要14行代碼即可搞定

雖然說XPath比正則表達式用起來方便,但是沒有最方便,只有更方便。我們的BeautifulSoup庫就能做到更方便的爬取想要的東西。

使用之前,還是老規矩,先安裝BeautifulSoup庫,指令如下:

其中文開發文檔:

BeautifulSoup庫是壹個強大的Python語言的XML和HTML解析庫。它提供了壹些簡單的函數來處理導航、搜索、修改分析樹等功能。

BeautifulSoup庫還能自動將輸入的文檔轉換為Unicode編碼,輸出文檔轉換為UTF-8編碼。

所以,在使用BeautifulSoup庫的過程中,不需要開發中考慮編碼的問題,除非妳解析的文檔,本身就沒有指定編碼方式,這才需要開發中進行編碼處理。

下面,我們來詳細介紹BeautifulSoup庫的使用規則。

下面,我們來詳細介紹BeautifulSoup庫的重點知識。

首先,BeautifulSoup庫中壹個重要的概念就是選擇解釋器。因為其底層依賴的全是這些解釋器,我們有必要認識壹下。博主專門列出了壹個表格:

從上面表格觀察,我們壹般爬蟲使用lxml HTML解析器即可,不僅速度快,而且兼容性強大,只是需要安裝C語言庫這壹個缺點(不能叫缺點,應該叫麻煩)。

要使用BeautifulSoup庫,需要和其他庫壹樣進行導入,但妳雖然安裝的是beautifulsoup4,但導入的名稱並不是beautifulsoup4,而是bs4。用法如下:

運行之後,輸出文本如下:

基礎的用法很簡單,這裏不在贅述。從現在開始,我們來詳細學習BeautifulSoup庫的所有重要知識點,第壹個就是節點選擇器。

所謂節點選擇器,就是直接通過節點的名稱選擇節點,然後再用string屬性就可以得到節點內的文本,這種方式獲取最快。

比如,基礎用法中,我們使用h1直接獲取了h1節點,然後通過h1.string即可得到它的文本。但這種用法有壹個明顯的缺點,就是層次復雜不適合。

所以,我們在使用節點選擇器之前,需要將文檔縮小。比如壹個文檔很多很大,但我們獲取的內容只在id為blog的p中,那麽我們先獲取這個p,再在p內部使用節點選擇器就非常合適了。

HTML示例代碼:

下面的壹些示例,我們還是使用這個HTML代碼進行節點選擇器的講解。

這裏,我們先來教會大家如何獲取節點的名稱屬性以及內容,示例如下:

運行之後,效果如下:

壹般來說壹個節點的子節點有可能很多,通過上面的方式獲取,只能得到第壹個。如果要獲取壹個標簽的所有子節點,這裏有2種方式。先來看代碼:

運行之後,效果如下:

如上面代碼所示,我們有2種方式獲取所有子節點,壹種是通過contents屬性,壹種是通過children屬性,2者遍歷的結果都是壹樣的。

既然能獲取直接子節點,那麽獲取所有子孫節點也是肯定可以的。BeautifulSoup庫給我們提供了descendants屬性獲取子孫節點,示例如下:

運行之後,效果如下:

同樣的,在實際的爬蟲程序中,我們有時候也需要通過逆向查找父節點,或者查找兄弟節點。

BeautifulSoup庫,給我們提供了parent屬性獲取父節點,同時提供了next_sibling屬性獲取當前節點的下壹個兄弟節點,previous_sibling屬性獲取上壹個兄弟節點。

示例代碼如下:

運行之後,效果如下:

對於節點選擇器,博主已經介紹了相對於文本內容較少的完全可以這麽做。但實際的爬蟲爬的網址都是大量的數據,開始使用節點選擇器就不合適了。所以,我們要考慮通過方法選擇器進行先壹步的處理。

find_all()方法主要用於根據節點的名稱、屬性、文本內容等選擇所有符合要求的節點。其完整的定義如下所示:

實戰還是測試上面的HTML,我們獲取name=a,attr={"class":"aaa"},並且文本等於text="Python板塊"板塊的節點。

示例代碼如下所示:

運行之後,效果如下所示:

find()與find_all()僅差壹個all,但結果卻有2點不同:

1.find()只查找符合條件的第壹個節點,而find_all()是查找符合條件的所有節點2.find()方法返回的是bs4.element.Tag對象,而find_all()返回的是bs4.element.ResultSet對象

下面,我們來查找上面HTML中的a標簽,看看返回結果有何不同,示例如下:

運行之後,效果如下:

首先,我們來了解壹下CSS選擇器的規則:

1..classname:選取樣式名為classname的節點,也就是class屬性值是classname的節點2.#idname:選取id屬性為idname的節點3.nodename:選取節點名為nodename的節點

壹般來說,在BeautifulSoup庫中,我們使用函數select()進行CSS選擇器的操作。示例如下:

這裏,我們選擇class等於li1的節點。運行之後,效果如下:

因為,我們需要實現嵌套CSS選擇器的用法,但上面的HTML不合適。這裏,我們略作修改,僅僅更改

  • 上一篇:計算機專業哪些老師講的好
  • 下一篇:計算機語言介紹:機器語言、匯編語言、高級語言
  • copyright 2024編程學習大全網