日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践

發(fā)布時(shí)間:2025/3/12 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來(lái)源:Python數(shù)據(jù)之道

作者:Peter

整理:陽(yáng)哥

爬蟲(chóng),是學(xué)習(xí)Python的一個(gè)有用的分支,互聯(lián)網(wǎng)時(shí)代,信息浩瀚如海,如果能夠便捷的獲取有用的信息,我們便有可能領(lǐng)先一步,而爬蟲(chóng)正是這樣的一個(gè)工具。

「Python數(shù)據(jù)之道」 之前已經(jīng)分享過(guò)一些關(guān)于介紹 爬蟲(chóng) 的內(nèi)容,大家也可以前往閱讀:

  • 巧用 selenium 解決驗(yàn)證碼,模擬登陸某流行網(wǎng)站

  • Python異步爬蟲(chóng)進(jìn)階必備,效率杠杠的!

  • 干貨!一文教會(huì)你 Scrapy 爬蟲(chóng)框架的基本使用

  • 喜歡玩王者榮耀的有福了,用 Python 獲取英雄皮膚壁紙

  • 硬核教程,利用 Python 搞定精美網(wǎng)絡(luò)圖!

  • 爬蟲(chóng)神器 Pyppeteer 介紹及爬取某商城實(shí)戰(zhàn)


Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。由于 BeautifulSoup 是基于 Python,所以相對(duì)來(lái)說(shuō)速度會(huì)比另一個(gè) Xpath 會(huì)慢點(diǎn),但是其功能也是非常的強(qiáng)大,本文會(huì)介紹該庫(kù)的基本使用方法,幫助讀者快速入門(mén)。

網(wǎng)上有很多的學(xué)習(xí)資料,但是超詳細(xì)學(xué)習(xí)內(nèi)容還是非官網(wǎng)莫屬,資料傳送門(mén):

英文官網(wǎng):https://www.crummy.com/software/BeautifulSoup/bs4/doc/

中文官網(wǎng):https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

本文的主要內(nèi)容如下:

安裝和使用

安裝

安裝過(guò)程非常簡(jiǎn)單,直接使用pip即可:

pip?install?beautifulsoup4

上面安裝庫(kù)最后的4是不能省略的,因?yàn)檫€有另一個(gè)庫(kù)叫作 beautifulsoup,但是這個(gè)庫(kù)已經(jīng)停止開(kāi)發(fā)了。

因?yàn)锽S4在解析數(shù)據(jù)的時(shí)候是需要依賴(lài)一定的解析器,所以還需要安裝解析器,我們安裝強(qiáng)大的lxml:

pip?install?lxml

在python交互式環(huán)境中導(dǎo)入庫(kù),沒(méi)有報(bào)錯(cuò)的話(huà),表示安裝成功。

使用

使用過(guò)程直接導(dǎo)入庫(kù):

from?bs4?import?BeautifulSoup

解析原理

解析原理

  • 實(shí)例化一個(gè)BeautifulSoup對(duì)象,并且將本地或者頁(yè)面源碼數(shù)據(jù)加載到該對(duì)象中

  • 通過(guò)調(diào)用該對(duì)象中相關(guān)的屬性或者方法進(jìn)行標(biāo)簽定位和數(shù)據(jù)提取

如何實(shí)例化BeautifulSoup對(duì)象

  • 將本地的HTML文檔中的數(shù)據(jù)加載到BS對(duì)象中

  • 將網(wǎng)頁(yè)上獲取的頁(yè)面源碼數(shù)據(jù)加載到BS對(duì)象中

  • 案例解析

    原數(shù)據(jù)

    假設(shè)我們現(xiàn)在本地有一個(gè)HTML文件待解析,具體內(nèi)容如下,數(shù)據(jù)中有各種HTML標(biāo)簽:html、head、body、div、p、a、ul、li等

    加載數(shù)據(jù)

    from?bs4?import?BeautifulSoupfp?=?open('./test.html','r',encoding='utf-8')??#?打開(kāi)本地文件 soup?=?BeautifulSoup(fp,'lxml') soup

    所有的數(shù)據(jù)解析都是基于soup對(duì)象的,下面開(kāi)始介紹各種解析數(shù)據(jù)方法:

    soup.tagName

    soup.TagName返回的是該標(biāo)簽第一次出現(xiàn)的內(nèi)容,以a標(biāo)簽為例:

    數(shù)據(jù)中多次出現(xiàn)a標(biāo)簽,但是只會(huì)返回第一次出現(xiàn)的內(nèi)容

    我們?cè)倏聪耫iv標(biāo)簽:

    出現(xiàn)了2次,但是只會(huì)返回第一次的內(nèi)容:

    soup.find('tagName')

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

    • 返回某個(gè)標(biāo)簽第一次出現(xiàn)的內(nèi)容,等同于上面的soup.tagName

    • 屬性定位:用于查找某個(gè)有特定性質(zhì)的標(biāo)簽

    1、返回標(biāo)簽第一次出現(xiàn)的內(nèi)容:

    比如返回a標(biāo)簽第一次出現(xiàn)的內(nèi)容:

    再比如返回div標(biāo)簽第一次出現(xiàn)的內(nèi)容:

    2、屬性定位

    比如我們想查找a標(biāo)簽中id為“谷歌”的數(shù)據(jù)信息:

    在BS4中規(guī)定,如果遇到要查詢(xún)class情況,需要使用class_來(lái)代替:

    但是如果我們使用attrs參數(shù),則是不需要使用下劃線(xiàn)的:

    soup.find_all()

    該方法返回的是指定標(biāo)簽下面的所有內(nèi)容,而且是列表的形式;傳入的方式是多種多樣的。

    1、傳入單個(gè)指定的標(biāo)簽

    image-20210523170401516

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

    2、傳入多個(gè)標(biāo)簽(列表形式)

    需要主要返回內(nèi)容的表達(dá)形式,每個(gè)標(biāo)簽的內(nèi)容是單獨(dú)顯示的

    3、傳入正則表達(dá)式

    比如查看以a開(kāi)頭標(biāo)簽的全部?jī)?nèi)容

    查看以li標(biāo)簽開(kāi)頭的全部?jī)?nèi)容:

    選擇器soup.select()

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

    • 類(lèi)選擇器:點(diǎn)

    • id選擇器:#

    • 標(biāo)簽選擇器:直接指定標(biāo)簽名

    1、類(lèi)選擇器

    2、id選擇器

    3、標(biāo)簽選擇器

    直接指定li標(biāo)簽

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

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

    層級(jí)選擇器使用

    在soup.select()方法中是可以使用層級(jí)選擇器的,選擇器可以是類(lèi)、id、標(biāo)簽等,使用規(guī)則:

    • 單層:>

    • 多層:空格

    1、單層使用

    2、多層使用

    獲取標(biāo)簽文本內(nèi)容

    獲取某個(gè)標(biāo)簽中對(duì)應(yīng)文本內(nèi)容主要是兩個(gè)屬性+一個(gè)方法:

    • text

    • string

    • get_text()

    1、text

    2、string

    3、get_text()

    3者之間的區(qū)別

    # text和get_text():獲取標(biāo)簽下面的全部文本內(nèi)容 # string:只能獲取到標(biāo)簽下的直系文本內(nèi)容

    獲取標(biāo)簽屬性值

    1、通過(guò)選擇器來(lái)獲取

    2、通過(guò)find_all方法來(lái)獲取

    BeautifulSoup實(shí)戰(zhàn)

    下面介紹的是通過(guò)BeautifulSoup解析方法來(lái)獲取某個(gè)小說(shuō)網(wǎng)站上古龍小說(shuō)名稱(chēng)和對(duì)應(yīng)的URL地址。

    網(wǎng)站數(shù)據(jù)

    我們需要爬取的數(shù)據(jù)全部在這個(gè)網(wǎng)址下:https://www.kanunu8.com/zj/10867.html,右鍵“檢查”,查看對(duì)應(yīng)的源碼,可以看到對(duì)應(yīng)小說(shuō)名和URL地址在源碼中位置

    每行3篇小說(shuō)在一個(gè)tr標(biāo)簽下面,對(duì)應(yīng)的屬性href和文本內(nèi)容就是我們想提取的內(nèi)容。

    獲取網(wǎng)頁(yè)源碼

    import?requests from?bs4?import?BeautifulSoup import?pandas?as?pd import?reurl?=?'https://www.kanunu8.com/zj/10867.html' headers?=?{'user-agent':?'個(gè)人請(qǐng)求頭'}response?=?requests.get(url?=?url,headers?=?headers) result?=?response.content.decode('gbk')???#?該網(wǎng)頁(yè)需要通過(guò)gbk編碼來(lái)解析數(shù)據(jù) #?result

    實(shí)例化BeautifulSoup對(duì)象

    soup1?=?BeautifulSoup(result,'lxml') #?print(soup1.prettify())??美化輸出源碼內(nèi)容

    獲取名稱(chēng)和URL地址

    1、先獲取整體內(nèi)容

    兩個(gè)信息全部指定a標(biāo)簽中,我們只需要獲取到a標(biāo)簽,通過(guò)兩個(gè)屬性href和target即可鎖定:

    #?兩個(gè)屬性href和target,不同的方法來(lái)鎖定information_list?=?soup1.find_all('a',href=re.compile('^/book'),target='_blank') information_list

    2、再單獨(dú)獲取兩個(gè)信息

    通過(guò)屬性來(lái)獲取URL地址,通過(guò)文本來(lái)獲取名稱(chēng)

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

    3、生成數(shù)據(jù)幀

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

    我們發(fā)現(xiàn)每部小說(shuō)的具體地址其實(shí)是有一個(gè)公共前綴的:https://www.kanunu8.com/book,現(xiàn)在給加上:

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

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

    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行數(shù)據(jù):

    總結(jié)

    本文從BeautifulSoup4庫(kù)的安裝、原理以及案例解析,到最后結(jié)合一個(gè)實(shí)際的爬蟲(chóng)實(shí)現(xiàn)介紹了一個(gè)數(shù)據(jù)解析庫(kù)的使用,文中介紹的內(nèi)容只是該庫(kù)的部分內(nèi)容,方便使用者快速入門(mén),希望對(duì)讀者有所幫助。

    作者簡(jiǎn)介

    Peter,碩士畢業(yè)僧一枚,從電子專(zhuān)業(yè)自學(xué)Python入門(mén)數(shù)據(jù)行業(yè),擅長(zhǎng)數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅(jiān)持跑步,熱愛(ài)閱讀,樂(lè)觀生活。個(gè)人格言:不浮于世,不負(fù)于己

    個(gè)人站點(diǎn):www.renpeter.cn

    往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線(xiàn)及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線(xiàn)手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯溫州大學(xué)《機(jī)器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請(qǐng)掃碼:

    總結(jié)

    以上是生活随笔為你收集整理的【Python】Python爬虫快速入门,BeautifulSoup基本使用及实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。