天天看點

爬蟲系列:連接配接網站與解析 HTML

這篇文章是爬蟲系列第三期,講解使用 Python 連接配接到網站,并使用 BeautifulSoup 解析 HTML 頁面。

在 Python 中我們使用 requests 庫來通路目标網站,使用 BeautifulSoup 對擷取的内容進行解析。由于這兩個庫并不是 Python 标準庫,是以需要單獨安裝這兩個庫:

下面是擷取網站内容的示例代碼:

首先使用了 requests 會話對象發送請求,并且設定了 User-agent,這裡 User-agent 可以自定,這就為僞造 User-agent 提供了便利,同時也告訴了伺服器用戶端接受那些内容類型:

網絡如果連接配接出現了錯誤,對錯誤進行異常處理:

BeautifulSoup 解析 HTML 文檔出現錯誤,抛出 AttributeError:

以上就完成了一個使用 Python 連接配接網站的過程。這個時候如果沒有異常我們就會拿到網站的 HTML 代碼,之後根據需要進一步對 HTML 進行内容解析,擷取自己需要的内容。

如果你已經确定了目标内容,可能是采集一個名字,一組統計資料,或者一段文字。你的目标内容可能隐藏在一個 HTML “爛泥堆”的第20層标簽裡,帶有許多沒用的标簽或 HTML 屬性,你按照目标網站的代碼層級你有可能寫出如下的一行代碼抽取内容:

雖然以上寫法可以達到目标,但是這樣的寫法看起來并不是很好。除了代碼欠缺美感之外,還有一個問題就是:當網站管理者對網站稍作修改之後,這行代碼便會失效。

例如,我們需要獲得自己的公網 IP 位址,我們可以通過查詢這個網站獲得:https://www.pdflibr.com,之後檢視網頁源代碼,找到自己的 IP 位址,又如下源代碼:

我們使用 BeautifulSoup 經行解析:

這樣就可以擷取自己的 IP 以及 IP 歸屬地。