尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
BeautifulSoup是python的一個解析、遍歷、維護網頁文檔「標簽」的功能庫模塊,其主要功能是從連接的網站上通過解析文檔抓取網頁數據。BeautifulSoup模塊提供了一些功能函數用來處理導航、搜索、修改分析樹等。
BeautifulSoup模塊使用時不需要考慮編碼方式,它自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。
01
安裝BeautifulSoup模塊
BeautifulSoup模塊不是Pyton系統自帶模塊,因此,在使用前必須用pip安裝該模塊。用pip安裝BeautifulSoup模塊的命令如下:
pip installbeautifulsoup4
安裝結果如圖9.4所示。
圖9.4 安裝BeautifulSoup模塊
02
BeautifulSoup模塊的基本元素
BeautifulSoup模塊的基本元素如表9-2所示。
表9-2 BeautifulSoup模塊的基本元素
03
HTML標簽及標簽樹
1
●
標簽
HTML文檔的語句稱為標簽,例如:
2
●
「標簽樹」
在解析網頁文檔的過程中,需要應用BeautifulSoup模塊對HTML內容進行遍歷。
設有如下的一個HTML文檔:
<html>
<head>
….
</head>
<body>
<pclass=”title”>The demo Python Project. </p>
<pclass=”course”>Python is a programming language.
<ahref=”http://www.icourse163.com”>Basic Python </a>
<ahref=”http:..www.python.org”>Advanced Python </a>
</p>
</body>
</html>
將其文檔標簽繪成樹形結構,該結構稱為「標簽樹」,如圖9.5所示。
圖9.5 「標簽樹」
04
BeautifulSoup模塊對網頁頁面元素定位方法
設定義BeautifulSoup模塊解析器對象為soup,則按網頁頁面中的標簽元素進行定位的方法如表9-3所示。
表9-3 BeautifulSoup模塊對象的常用資訊提取方法
1
●
通過標簽名定位
例:設有HTML文檔的代碼如下
<table>
<td>apple </td>
<td>banana </td>
<table>
則
soup.find( “td”) # 返回第一個「<td></td>」節點
soup.find_all( “td”) # 返回所有的「<td></td>」節點
2
●
通過標簽屬性定位
例:設有HTML文檔的代碼如下
<table>
<tdname=”fruit”>apple </td>
<tdname=”fruit”>apple </td>
</table>
則
soup.find(name= “fruit”) # 返回第一個「<td></td>」節點
soup.find_all(name= “fruit”) # 返回所有的「<td></td>」節點
3
●
通過標簽名+屬性定位
例:設有HTML文檔的代碼同(2),則
soup.find( “td”,{ “name”: “fruit”}) # 返回第一個「<td></td>」節點
soup.find_all( “td”,{ “name”: “fruit”}) # 返回所有的「<td></td>」節點
4
●
通過text定位
例:設有HTML文檔的代碼同(2),則
soup.find(text= “apple”) # 返回第一個「<td></td>」節點
05
應用範例
【例9-3】 爬取某電影網站最新電影資訊。
打開某電影網站:
https://movie.douban.com/cinema/nowplaying/xiamen/
其頁面如圖9.6所示。
圖9.6 某電影網站
1
●
獲取網站頁面的HTML代碼
url = “https://movie.douban.com/cinema/nowplaying/xiamen/”
headers = {
“USER-Agent”: UserAgent.chrome
}
req = request.Request(url, headers = headers)
resp = request.urlopen(req)
html_data=resp. read.decode
print(html_data)
2
●
創建解析器對象
在瀏覽器按下F12鍵進入調試頁面。在調試頁面的代碼中,當滑鼠停留在某代碼行時,左邊網頁頁面需要選中的欄目板塊被灰色覆蓋,如圖9.7所示。
圖9.7在瀏覽器按下F12鍵進入調試頁面
在調試頁面的代碼中,找到電影名稱,如圖9.8所示。
圖9.8 調試頁面中電影名稱等資訊
從圖9.6中可以看到,電影名稱等資訊放在<div id = 「upcoming」>區域塊中,其中標簽<li class=「list-item」>顯示具體資訊內容。
因此,可以使用解析器對象對其標簽屬性進行定位:
soup= bs(html_data, “html.parser”) # 構建一個解析器
nowplay1= soup.find_all( “div”, id= “nowplaying”)
nowplay2= nowplay1[ 0].find_all( “li”, class_ = “list-item”)
3
●
通過循環,解析出所有電影名稱資訊
foritem in nowplay2:
nowplay_dict[ ‘id’] = item[ ‘id’]
nowplay_dict[ ‘name’] = item[ ‘data-title’]
nowplay_list. append(nowplay_dict)
4
●
完整程序如下
程序運行結果如圖9.9所示。
圖9.9 爬取某電影網站最新電影名稱
06
視訊講解
07
參考書籍
《Python程序設計案例教程——從入門到機器學習(第2版)(微課版)》
ISBN:9787302567691
作者:張思民
定價:49.8元
08
精彩推薦
-
鯤鵬架構入門與實戰︱鯤鵬應用遷移(附代碼)
-
《機器學習》實驗指導書(附實驗參考+代碼)
-
Python爬蟲綜合實戰 │ 創建雲起書院爬蟲(附代碼)
-
Python爬蟲實戰 │ Email提醒(附代碼)
-
Python深度學習 │一文掌握卷積神經網路
-
Python邊做邊學︱商品列表資訊爬取(附代碼)
-
P ython爬蟲實戰│狀態521網頁的爬取
-
Python爬蟲實戰│爬取天氣數據的實例詳解(附源碼)
-
Python實訓:用貪婪算法分析業務員路徑問題|附源碼
鯤鵬架構入門與實戰︱鯤鵬應用遷移(附代碼)
《機器學習》實驗指導書(附實驗參考+代碼)
Python爬蟲綜合實戰 │ 創建雲起書院爬蟲(附代碼)
Python爬蟲實戰 │ Email提醒(附代碼)
Python深度學習 │一文掌握卷積神經網路
Python邊做邊學︱商品列表資訊爬取(附代碼)
P ython爬蟲實戰│狀態521網頁的爬取
Python爬蟲實戰│爬取天氣數據的實例詳解(附源碼)
Python實訓:用貪婪算法分析業務員路徑問題|附源碼