1. 程式人生 > >學習Python爬蟲第一步,Bs4庫

學習Python爬蟲第一步,Bs4庫

pri rom 示例 上一個 標簽 string 使用 gpo s參數

首先是安裝BS4庫
因為Python的pip真的很方便,所以一般不出意外,只需要一個pip就足以完成一個庫的安裝。

pip install beautifulsoup4
名字很長不要記錯名字呦。

想要利用爬蟲獲得我們想要的內容,就一定要學會一個解析HTML的庫。
我們總不能用正則表達式,匹配出我們需要的內容,那任務量一定是巨大的,繁瑣的,很少有人去那麽做,除非你就是需要這個網頁中特定的元素。

怎麽使用BS4庫?
Bs4庫和有些庫還有一些不同,像我們學習爬蟲一定要學習的requests庫,我們只需要安裝好之後引入就可以。

import requests
但是Bs4庫還有一些不同,雖然我們是安裝的beaifulsoup4,但是引用的時候要這樣引用:

from bs4 import BeuautifulSoup
學習使用BeautifulSoup
BeautifulSoup就是用來解析HTML源代碼,然後方便我們拿到想要的內容。
BeautifulSoup有四種解析方式,我們只講一種,因為其他三種解析方式,要麽需要額外安裝,要麽就是慢,所以我們選擇適中穩定,方便的html.parser。

抓取標簽
我只講解一些常用到的獲取標簽的方式。
首先貼上一個HTML示例。

我的第一個BeautifulSoup使用

這是一個通過class抓取到的內容

這是一個通過id抓取到的消息

這是一個通過標簽名抓取到的消息

接下來我們就對這個html內容進行解析。

首先先對html進行解析(也可以理解為,將html代碼轉換為BeautifulSoup可以操作的類型)
我們先用一個變量來保存這個html源碼

Html = """


我的第一個BeautifulSoup使用


這是一個通過class抓取到的內容


這是一個通過id抓取到的消息


這是一個通過標簽名抓取到的消息


標簽內容



"""
這個變量保存html源碼之後我們就要來解析這段源碼

Soup = BeautifulSoup(Html, "html.parser")
這裏需要兩個參數,第一個Html就是我們剛才在變量中存儲的html源碼,這個參數必須是str類型,第二個參數是解析的方式,我們只使用html.parser所以這個參數就是死的,不會改變的,記住就可以了。

當我們獲得BeautifulSoup的返回值,也就是我們現在這個Soup,我們想要獲得HTML的某個內容就是使用這個Soup變量,//Soup是一個BS4中的一個類,這個就不提了。

怎麽去找到某個元素的標簽
BeautifulSoup提供了很多的查找方式,我們在這裏只講幾個常用的查找方式。

第一種查找方式
示例比如說我們要查詢"這是一個通過class抓取到的內容"這一段內容的話可以使用:

print(Soup.body.p.string)
因為Soup是代表整個html,所以在Soup下的body標簽中的第一個p標簽的string,string就是標簽的內容,就會獲得"這是一個通過class抓取到的內容"這個內容,這是一種根據標簽的上下級關系來查找的,並不是很常用。

什麽時候有用呢?
比如說我們要獲得一個html的title元素。

print(Soup.title.string)
就會輸出title的內容。
在這種情況下使用就會很方便

第二種查找方式
find和find_all
find查找只能查找符合條件的一個標簽。
find_all可以查找符合條件的所有標簽。
根據標簽中的class要查找標簽

例如說根據class查找
查找我們html源碼中唯一一個擁有class的標簽

ClassTag = Soup.find(class_="classtext")
這個參數class_是因為python中有類,類的關鍵字是class,所以用了class_代替了class。
find查找到class等於"classtext"的標簽,如果我們想獲得ClassTag的內容

print(ClassTag.string)
就可以輸出ClassTag的內容,.string對任何標簽都適用。
也可以獲取標簽的屬性
比如說輸出標簽的class屬性

print(ClassTag["class"])
獲得標簽的任意屬性都是使用這種方式,Tag["xxx"]獲得Tag的xxx屬性。

根據標簽內容查找

Soup.find("p", text="標簽內容")
通常find和find_all的第一個參數是字符串類型的時候,就是想要查找的標簽名,例如這一段代碼,就是要查找p標簽,查找某個p標簽text的內容是"標簽內容"的標簽。如果沒有找到就會返回None。
一般我們只會用到id內容查詢和class內容查詢。
接下來我們示例查找那個id等於"idtext"的p標簽。

Soup.find("p", id="idtext")
獲得id="text"的標簽。

第三種查找方式
這種查找方式是一種全能的方式,可以搜索任意元素的標簽。
是使用attrs參數
示例

Soup.find("p", attrs={"id":"idtext"})
根據字典鍵值對來查詢標簽,attrs就是標簽屬性名對應屬性內容來查找。這裏符合條件的標簽必須符合id="idtext"這個條件。

attrs={"class":"classtext"}
這裏查找到的標簽,必須符合class="classtext"條件。

find和find_all的區別
find查找到的標簽,就算有很多標簽都符合條件,也只會查找到第一條。
find_all查找到的標簽,是所以符合條件的所有標簽。

劉傲天 Qq:1151172004
雖然不會有人轉載但還是聲明,轉載聲明出處,並發郵箱提醒本人,[email protected]
如有錯誤還請聯系
轉發QQ:1539747235
郵箱:[email protected]
本文基於《署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)》許可協議授權
文章鏈接:https://www.allsrc.cn/requests/BeautifulSoup.html (轉載時請註明本文出處及文章鏈接)

學習Python爬蟲第一步,Bs4庫