Python爬蟲快速入門,BeautifulSoup基本使用及實踐

2022-01-03 小詹學Python

來源:Python數據之道

作者:Peter

整理:陽哥

今天來跟大家分享用 BeautifulSoup 獲取信息的一些知識點,文章內容由公眾號讀者 Peter 創作。

爬蟲,是學習Python的一個有用的分支,網際網路時代,信息浩瀚如海,如果能夠便捷的獲取有用的信息,我們便有可能領先一步,而爬蟲正是這樣的一個工具。

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫。由於 BeautifulSoup 是基於 Python,所以相對來說速度會比另一個 Xpath 會慢點,但是其功能也是非常的強大,本文會介紹該庫的基本使用方法,幫助讀者快速入門。

網上有很多的學習資料,但是超詳細學習內容還是非官網莫屬,資料傳送門:

英文官網:https://www.crummy.com/software/BeautifulSoup/bs4/doc/

中文官網:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

本文的主要內容如下:

安裝和使用安裝

安裝過程非常簡單,直接使用pip即可:

pip install beautifulsoup4

上面安裝庫最後的4是不能省略的,因為還有另一個庫叫作 beautifulsoup,但是這個庫已經停止開發了。

因為BS4在解析數據的時候是需要依賴一定的解析器,所以還需要安裝解析器,我們安裝強大的lxml:

pip install lxml

在python交互式環境中導入庫,沒有報錯的話,表示安裝成功。

使用

使用過程直接導入庫:

from bs4 import BeautifulSoup

解析原理解析原理實例化一個BeautifulSoup對象,並且將本地或者頁面源碼數據加載到該對象中通過調用該對象中相關的屬性或者方法進行標籤定位和數據提取如何實例化BeautifulSoup對象案例解析原數據

假設我們現在本地有一個HTML文件待解析,具體內容如下,數據中有各種HTML標籤:html、head、body、div、p、a、ul、li等

加載數據
from bs4 import BeautifulSoup

fp = open('./test.html','r',encoding='utf-8')  # 打開本地文件
soup = BeautifulSoup(fp,'lxml')
soup

所有的數據解析都是基於soup對象的,下面開始介紹各種解析數據方法:

soup.tagName

soup.TagName返回的是該標籤第一次出現的內容,以a標籤為例:

數據中多次出現a標籤,但是只會返回第一次出現的內容

我們再看下div標籤:

出現了2次,但是只會返回第一次的內容:

soup.find('tagName')

find()主要是有兩個方法:

返回某個標籤第一次出現的內容,等同於上面的soup.tagName

1、返回標籤第一次出現的內容:

比如返回a標籤第一次出現的內容:

再比如返回div標籤第一次出現的內容:

2、屬性定位

比如我們想查找a標籤中id為「谷歌」的數據信息:

在BS4中規定,如果遇到要查詢class情況,需要使用class_來代替:

但是如果我們使用attrs參數,則是不需要使用下劃線的:

soup.find_all()

該方法返回的是指定標籤下面的所有內容,而且是列表的形式;傳入的方式是多種多樣的。

1、傳入單個指定的標籤

image-20210523170401516

上面返回的是列表形式,我們可以獲取我們想要的內容:

2、傳入多個標籤(列表形式)

需要主要返回內容的表達形式,每個標籤的內容是單獨顯示的

3、傳入正則表達式

比如查看以a開頭標籤的全部內容

查看以li標籤開頭的全部內容:

選擇器soup.select()

主要是有3種選擇器,返回的內容都是列表形式

1、類選擇器

2、id選擇器

3、標籤選擇器

直接指定li標籤

4、選擇器和find_all()可以達到相同的效果:

soup.tagName和soup.find('tagName')的效果也是相同的:

層級選擇器使用

在soup.select()方法中是可以使用層級選擇器的,選擇器可以是類、id、標籤等,使用規則:

1、單層使用

2、多層使用

獲取標籤文本內容

獲取某個標籤中對應文本內容主要是兩個屬性+一個方法:

1、text

2、string

3、get_text()

3者之間的區別

# text和get_text():獲取標籤下面的全部文本內容
# string:只能獲取到標籤下的直系文本內容

獲取標籤屬性值

1、通過選擇器來獲取

2、通過find_all方法來獲取

BeautifulSoup實戰

下面介紹的是通過BeautifulSoup解析方法來獲取某個小說網站上古龍小說名稱和對應的URL地址。

網站數據

我們需要爬取的數據全部在這個網址下:https://www.kanunu8.com/zj/10867.html,右鍵「檢查」,查看對應的源碼,可以看到對應小說名和URL地址在源碼中位置

每行3篇小說在一個tr標籤下面,對應的屬性href和文本內容就是我們想提取的內容。

獲取網頁源碼
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

url = 'https://www.kanunu8.com/zj/10867.html'
headers = {'user-agent': '個人請求頭'}

response = requests.get(url = url,headers = headers)
result = response.content.decode('gbk')   # 該網頁需要通過gbk編碼來解析數據
# result

實例化BeautifulSoup對象
soup1 = BeautifulSoup(result,'lxml')
# print(soup1.prettify())  美化輸出源碼內容

獲取名稱和URL地址

1、先獲取整體內容

兩個信息全部指定a標籤中,我們只需要獲取到a標籤,通過兩個屬性href和target即可鎖定:

# 兩個屬性href和target,不同的方法來鎖定

information_list = soup1.find_all('a',href=re.compile('^/book'),target='_blank')
information_list

2、再單獨獲取兩個信息

通過屬性來獲取URL地址,通過文本來獲取名稱

url_list = []
name_list = []

for i in information_list:
    url_list.append(i['href'])  # 獲取屬性
    name_list.append(i.text)  # 獲取文本

3、生成數據幀

gulong = pd.DataFrame({
    "name":name_list,
    "url":url_list}
)

gulong

我們發現每部小說的具體地址其實是有一個公共前綴的:https://www.kanunu8.com/book,現在給加上:

gulong['url'] = 'https://www.kanunu8.com/book' + gulong['url']   # 加上公共前綴
gulong.head()

另外,我們想把書名的《》給去掉,使用replace替代函數:

gulong["name"] = gulong["name"].apply(lambda x:x.replace("《",""))  # 左邊
gulong["name"] = gulong["name"].apply(lambda x:x.replace("》","")) # 右邊

# 保存
gulong.to_csv("gulong.csv",index=False)  # 保存到本地的csv文件

最後顯示的前5行數據:

總結

本文從BeautifulSoup4庫的安裝、原理以及案例解析,到最後結合一個實際的爬蟲實現介紹了一個數據解析庫的使用,文中介紹的內容只是該庫的部分內容,方便使用者快速入門,希望對讀者有所幫助。

作者簡介

Peter,碩士畢業僧一枚,從電子專業自學Python入門數據行業,擅長數據分析及可視化。

個人站點:www.renpeter.cn

最近發現一個點外賣每頓飯都能少花5-20元的寶藏號。

進入公眾號點擊菜單領取紅包

最低5元,最高56元!

相關焦點

  • 【Python】Python爬蟲快速入門,BeautifulSoup基本使用及實踐
    來源:Python數據之道作者:Peter整理:陽哥爬蟲,是學習Python的一個有用的分支,網際網路時代,信息浩瀚如海,如果能夠便捷的獲取有用的信息,我們便有可能領先一步,而爬蟲正是這樣的一個工具。由於 BeautifulSoup 是基於 Python,所以相對來說速度會比另一個 Xpath 會慢點,但是其功能也是非常的強大,本文會介紹該庫的基本使用方法,幫助讀者快速入門。
  • Python 爬蟲基礎教程——BeautifulSoup抓取入門
    、使用vscode開發環境的時候會遇到的問題以及使用正則表達式的方式爬取頁面信息,本篇內容主要是介紹BeautifulSoup模塊的使用教程。官方文檔:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/BeautifulSoup安裝pip install beautifulsoup4或pip install beautifulsoup4-i http://pypi.douban.com/simple/
  • Python 爬蟲實戰(一):使用 requests 和 BeautifulSoup
    Python 基礎我之前寫的《Python 3 極簡教程.pdf》,適合有點編程基礎的快速入門,通過該系列文章學習,能夠獨立完成接口的編寫,寫寫小東西沒問題。BeautifulSoup 3 目前已經停止開發,直接使用BeautifulSoup 4。Mac:pip3 install beautifulsoup4Windows:pip install beautifulsoup4我用的是 html5lib,純 Python 實現的。
  • Python爬蟲系列:BeautifulSoup庫詳解
    -《德米安 彷徨少年時》之前了解過Requests庫的用法,在Python爬蟲中,用到BeautifulSoup4庫的技術路線為Requests庫+BeautifulSoup4庫+re庫,這裡小編準備先聊聊Beautiful Soup4庫。
  • Python爬蟲從入門到精通(3): BeautifulSoup用法總結及多線程爬蟲爬取糗事百科
    本文是Python爬蟲從入門到精通系列的第3篇。我們將總結BeautifulSoup這個解析庫以及常用的find和select方法。
  • python爬蟲之BeautifulSoup
    Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。還可以直接使用print soup.p['class']get方法用於得到標籤下的屬性值,注意這是一個重要的方法,在許多場合都能用到,比如你要得到標籤下的圖像url,那麼就可以用soup.img.get('src'),具體解析如下:print soup.p.get("class") #得到第一個p標籤下的src屬性得到標籤下的文本內容,只有在此標籤下沒有子標籤
  • 爬蟲必備網頁解析庫——BeautifulSoup詳解匯總(含Python代碼舉例講解+爬蟲實戰)
    pip install BeautifulSoup4pip install beautifulsoup4-4.9.3-py3-none-any.whl方式一,通過pip install BeautifulSoup4命令就可以直接安裝;方式二,需要通過下載whl文件,再去安裝。
  • 11-python爬蟲之Beautiful Soup
    Selenium官網的Document裡極力推薦使用CSS locator,而不是XPath來定位元素,原因是CSS locator比XPath locator速度快.Beautiful SoupBeautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。
  • 爬蟲入門系列(四):HTML文本解析庫BeautifulSoup
    安裝 BeautifulSouppip install beautifulsoup4BeautifulSoup3 被官方放棄維護,你要下載最新的版本 BeautifulSoup4。HTML 標籤學習 BeautifulSoup4 前有必要先對 HTML 文檔有一個基本認識,如下代碼,HTML 是一個樹形組織結構。
  • Python 爬蟲之 BeautifulSoup
    點擊上方藍字,快速關注我們)來源:chenjiabing666chenjiabing666.github.io/2017
  • Python: BeautifulSoup庫入門
    文章背景:進行網絡爬蟲時本文對BeautifulSoup模塊的使用進行簡單的介紹。  This is a python demo page  </title> </head> <body>  <p class="title">   <b>   The demo python introduces several python courses.
  • Python爬蟲筆記 | BeautifulSoup模塊(解析—提取數據)
    這節提到的beautifulsoup是個非常厲害的爬蟲利器;相比正則,其更好的利用了html這種結構性文檔的樹狀結構,解析起來更方便。
  • Python/BeautifulSoup爬蟲手把手實例教程
    Web爬蟲能自動抽取數據,並以人們容易理解的方式展現。本文章將舉個金融市場的例子,但是Web爬蟲能做的遠不止於此。
  • Python爬蟲庫-Beautiful Soup的使用
    博主使用的是Mac系統,直接通過命令安裝庫:sudo easy_install beautifulsoup4安裝完成後,嘗試包含庫運行:from bs4 import BeautifulSoup若沒有報錯,則說明庫已正常安裝完成。
  • Python爬蟲庫xPath, BeautifulSoup, re, selenium的詳細用法
    /li[last()-1]//child::*')  # 獲取當前節點的所有的文本節點all_attrs_node = html.xpath('//li[1]/a/attribute::*')  # 獲取當前節點 的所有屬性的屬性值all_child_text_node = html.xpath('//li[1]//child::text()')  # 獲取當前節點所有文本子節點
  • Python3 網絡爬蟲快速入門實戰解析
    urllib 庫是 python 內置的,無需我們額外安裝,只要安裝了 Python 就可以使用這個庫。requests 庫是第三方庫,需要我們自己安裝。這個庫強大好用,所以本文使用 requests 庫獲取網頁的 HTML 信息。
  • python爬蟲常用庫之BeautifulSoup詳解
    因為是第三方庫所以我們需要下載,在命令行敲下以下代碼進行下載pip install beautifulsoup4安裝第三方解析庫如果不知道有什麼用請往下看1.相關解析庫的介紹這裡官方推薦解析庫為lxml,因為它的效率高。
  • 使用requests+BeautifulSoup的簡單爬蟲練習
    如果你經常玩爬蟲的,這個就見怪不怪了,我們被反爬了。我們試下加個請求頭試試。接下來用BeautifulSoupL來獲取內容imgs = soup.select('dd .board-img')  titles = soup.select('dd .board-item-main .name')  starses = soup.select('dd .board-item-main .movie-item-info .star'
  • Python開發簡單爬蟲【學習資料總結】
    安裝:pip install beautifulsoup4開發爬蟲步驟python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)(1)Python3入門,數據類型,字符串
  • 我用Beautifulsoup(1)
    用Python爬蟲一步搞定。第4步:點擊+號添加第三方庫第5步:在輸入框,輸入beautifulsoup第6步:點擊搜索出的beautifulsoup4 installing,並有一個圓圈閃動安裝完成後會顯示:Package'beautifulsoup4' installed successfully