python3實現網絡爬蟲之BeautifulSoup使用詳解

這篇文章主要介紹了python3實現網絡爬蟲之BeautifulSoup使用詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這一次我們來了解一下美味的湯--BeautifulSoup,這將是我們以後經常使用的一個庫,並且非常的好用。

BeautifuleSoup庫的名字取自劉易斯·卡羅爾在《愛麗絲夢遊仙境》裏的同名詩歌。在故事中,這首歌是素甲魚唱的。就像它在仙境中的說法一樣,BeautifulSoup嘗試化平淡爲神奇。它通過定位HTML標籤來格式化和組織複雜的網絡信息,用簡單易用的Python對象爲我們展現XML結構信息。

由於BeautifulSoup庫不是Python標準庫,因此我們需要單獨安裝這個庫,才能使用它。對於這個庫的安裝,我們這裏秉着簡單的原則,就直接利用pycharm這個IDLE進行庫的自動下載和導入。

首先我們進入pycharm的主界面,單擊file-〉settings-〉Project:untitled-〉Project Interpreter,如下圖:



在上圖中我們會看到一個綠色的加號,這時我們單擊這個加號,會跳出如下的界面(pycharm在這個地方有時候很慢,會一直在這個界面刷新):


這時我們在搜索框中輸入“bs4”,然後選擇列表中的bs4,然後進行安裝,如下圖:


這樣我們就完成了BeautifulSoup這個庫的安裝,下面我們就可以來使用它了。

關於這個庫的官方文檔解釋的是很詳細的,一定要看一看:點擊打開鏈接

下面我就簡單說一下這個庫的一些方面。

首先呢,我們還是從一個例子開始我們的學習:

#coding:utf - 8
from urllib.request import urlopen
from bs4 import BeautifulSoup
 
html = urlopen("http://tieba.baidu.com/")
bsObj=BeautifulSoup(html,"lxml")  #將html對象轉化爲BeautifulSoup對象
print(bsObj.title)  #輸出這個網頁中的標題 
執

執行上面的程序,我們會得到的結果爲:<title>百度貼吧——全球最大的中文社區</title>
首先我們來分析下bsObj=BeautifulSoup(html,"lxml")這句話對我們的html做了什麼,在這句代碼中,我們將html對象傳入到BeautifulSoup中將它轉化成BeautifulSoup對象,關於第二個參數lxml,可以到官方文檔中看,解釋得很詳細,這裏大家只要知道帶上它就可以了,不需要管它。這樣,我們就成功將html對象轉化爲了BeautifulSoup對象。
下面我們來了解下BeautifulSoup對象的結構,當我們將html轉化後得到的結構爲:
html-><html><head>....</head><body>.....</body></html>
---head-><head><title>百度貼吧--全球最大的中文社區<title></head>

          ---title-><title>百度貼吧--全球最大的中文社區</title>

     ----body->.........

關於這個頁面的結構我中間省略了一些無關緊要的元素,只是爲了展示下這種層次化的結構。

從上面我們可以看出,BeautifulSoup將html對象進行了層次化處理了,對它的原網頁的標籤進行了逐層的處理和細化,以便於我們之後使用。也就是我們只要知道,任何HTML(或XML)文件的任意節點信息都可以被提取出來,只要目標信息的旁邊或者附近有標記就行了,這個標記就是我們網頁中使用到的各種div、li之類的標籤元素,也可以是class、id之類的屬性,通過這些我們都可以對需要的信息進行提取。

對於剛剛的bsObj.title這個提取標題的操作,由於一個網頁中只有一個title,所以我們可以直接獲取到它,因爲它是唯一的嘛,大家可以這樣理解,在一個學校中,你的學號是唯一的,我可以通過直接查找學號進而唯一的搜索你,而不會產生歧義。

對於bsObj.title我們有多重替代方案:

  • bsObj.html.head.title
  • bsObj.html.title
  • bsObj.head.title

關於上面的代碼大家是對網頁中元素的細化搜索,可以這樣理解啊,假定你已經知道一個人是計科院的了,那你搜索他的時候常規思路便是直接在計科院找他,而bsObj.head中的head就相當於計科院,它是網頁中的頭部,title就放在這裏面,所以我們使用bsObj.head.title也可以實現這個效果,其它的代碼可以類似分析。

BeautifulSoup是一個對象,所以我們可以通過運算符“.”對它的屬性進行提取。

如bsObj.title獲取html的標題對象,bsObj.title.name獲取標題的名字。。。

這裏就先簡單介紹這些,後面 我們將繼續深入說明BeautifulSoup的好的使用方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章