一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

爬蟲必備網(wǎng)頁解析庫——BeautifulSoup詳解匯總(含Python代碼舉例講解 爬蟲實(shí)戰(zhàn))

 北方的白樺林 2021-10-13

大家好,我是辰哥

本文帶大家學(xué)習(xí)網(wǎng)頁解析庫BeautifulSoup,

并通過python代碼舉例講解常用的BeautifulSoup用法

最后實(shí)戰(zhàn)爬取小說網(wǎng)頁:重點(diǎn)在于爬取的網(wǎng)頁通過BeautifulSoup進(jìn)行解析。

BeautifulSoup庫的安裝

Image
在使用BeautifulSoup解析庫之前,先簡(jiǎn)單介紹一下BeautifulSoup庫并講解如何安裝BeautifulSoup庫。

BeautifulSoup的基礎(chǔ)概念

BeautifulSoup支持Python標(biāo)準(zhǔn)庫中的Html解析器,還支持一些第三方解析器。利用它可以不用編寫正則表達(dá)式即可方便地實(shí)現(xiàn)網(wǎng)頁信息的提取。

安裝BeautifulSoup

BeautifulSoup的安裝其實(shí)很簡(jiǎn)單,下面介紹兩種不同的安裝方式(適用不同的操作系統(tǒng))。







#方式一:pip安裝pip install BeautifulSoup4
#方式二:wheel安裝#下載對(duì)應(yīng)系統(tǒng)版本的wheel文件:http://www.lfd./~gohlke/pythonlibspip install beautifulsoup4-4.9.3-py3-none-any.whl

方式一,通過pip install BeautifulSoup4命令就可以直接安裝;

方式二,需要通過下載whl文件,再去安裝。

其下載鏈接為:http://www.lfd./~gohlke/pythonlibs。訪問鏈接后下載beautifulsoup4-4.9.3-py3-none-any.whl。

BeautifulSoup基本元素

Image
上述內(nèi)容講解了獲取到一個(gè)BeautifulSoup 對(duì)象后,一般通過BeautifulSoup類的基本元素來提取html中的內(nèi)容。下表中列舉了BeautifulSoup的基本元素:

基本元素見表所示:

基本元素

說明

Tag

標(biāo)簽,用<>和</>標(biāo)明開頭和結(jié)尾

Name

標(biāo)簽的名字

Attributes

標(biāo)簽的屬性

NavigableString

標(biāo)簽內(nèi)非屬性字符串

Comment

標(biāo)簽內(nèi)字符串的注釋部分

BeautifulSoup的使用

Image
通過一個(gè)小例子,學(xué)習(xí)BeautifulSoup 庫如何去解析網(wǎng)頁并提取數(shù)據(jù)。首先構(gòu)造一個(gè)html網(wǎng)頁數(shù)據(jù),再將其解析為BeautifulSoup 對(duì)象。

完整代碼如下:

from bs4 import BeautifulSoup
test_html = '''
<html>
  <body>
    <h4>學(xué)號(hào)</h4>
    <ul>
       <li>2112001</li>
       <li>2112002</li>
       <li class='blank'>2112003</li>
       <li>2112004</li>
    </ul>
    <h4>姓名</h4>
    <ul class='ul' style='color:red'>
        <li>張三</li>
        <li>李四</li>
        <li>王五</li>
        <li>老六</li>
    </ul>
  </body>
</html>
'''
# 把網(wǎng)頁解析為BeautifulSoup對(duì)象
soup = BeautifulSoup(test_html, 'html.parser')
首先是導(dǎo)入BeautifulSoup庫,然后構(gòu)造一段html源碼,最后解析為BeautifulSoup對(duì)象。下面通過幾個(gè)例子進(jìn)行講解提取數(shù)據(jù)。

提取數(shù)據(jù)

#提取首個(gè)h4元素
item = soup.find('h4')
print(item)
#提取所有的h4元素
items = soup.find_all('h4')
print(items)

'''
結(jié)果:
<h4>學(xué)號(hào)</h4>
[<h4>學(xué)號(hào)</h4>, <h4>姓名</h4>]
'''

區(qū)別

(1)find()只提取首個(gè)滿足要求的數(shù)據(jù)

(2)find_all()提取出的是所有滿足要求的數(shù)據(jù)

精確定位提取數(shù)據(jù)

# 查詢class為blank的li標(biāo)簽
print(soup.find('li',class_='blank'))
# ul標(biāo)簽
print(soup.ul)
# 獲取ul標(biāo)簽名字
print(soup.ul.name)
# ul標(biāo)簽的父標(biāo)簽(上一級(jí)標(biāo)簽)的名字
print(soup.ul.parent.name)
# ul標(biāo)簽的父標(biāo)簽的父標(biāo)簽的名字
print(soup.ul.parent.parent.name)
'''
結(jié)果:
<li class='blank'>2112003</li>

<ul>
<li>2112001</li>
<li>2112002</li>
<li class='blank'>2112003</li>
<li>2112004</li>
</ul>

ul
body
html
'''
BeautifulSoup可以通過標(biāo)簽的class、id等屬性去定位網(wǎng)頁標(biāo)簽,此外還可以通過父級(jí)、子級(jí)關(guān)系去定位。

實(shí)戰(zhàn):抓取不同類型小說

Image

內(nèi)容:抓取不同類型小說的書名和鏈接

思路:爬蟲抓取不同類型的小說網(wǎng)頁,并通過BeautifulSoup去解析網(wǎng)頁源碼,提取出數(shù)據(jù)

鏈接:http://book./all/id/18.html

在瀏覽器中訪問鏈接其頁面如下:

Image

這里的鏈接對(duì)應(yīng)的是“奇幻玄幻”類型的小說,點(diǎn)擊不同的分類小說,就可以獲取到對(duì)應(yīng)的鏈接。這里以“奇幻玄幻”為例,進(jìn)行講解如何去爬取該類別的小說,并通過BeautifulSoup去解析頁面。以此類推,只需要更換不同的類型鏈接,就可以達(dá)到抓取不同類型的小說的效果。

首先分析一下網(wǎng)頁源碼:

Image

通過網(wǎng)頁源代碼可以清楚的知道頁面的所有小說都在class為listboxw的div標(biāo)簽里,而每一本小說都在dl標(biāo)簽中,我們需要抓取的小說書名和鏈接在dl標(biāo)簽下的dd標(biāo)簽中的第一個(gè)a標(biāo)簽里面。

完整代碼如下

from bs4 import BeautifulSoup
import requests
# 設(shè)置代理服務(wù)器
headers = {
    'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'}
#請(qǐng)求連接
url = 'http://book./all/id/18.html'
response = requests.get(url, headers=headers)
if response.status_code == 200:
    # 轉(zhuǎn)化為utf-8格式,不加這條語句,輸出爬取的信息為亂碼
    response.encoding = 'utf8'
    # 把網(wǎng)頁解析為BeautifulSoup對(duì)象
    soup = BeautifulSoup(response.text, 'html.parser')
    for element in soup.find_all(['dl', ['dd']]):
        a = element.find('a')
        if a.string!=None:
            print(a.string)
            print(a.get('href'))
代碼整體思路:先requests請(qǐng)求目標(biāo)鏈接,獲取到網(wǎng)頁源碼,然后通過BeautifulSoup去解析源碼,最后提取出小說書名和小說鏈接。因?yàn)樾≌f書名和小說鏈接都在a標(biāo)簽中,所以可以通過a.string去提取書名、a.get('href’)提取小說鏈接,最后輸出結(jié)果。

結(jié)果

智行斗羅
/novel/235.html
歷劫我是認(rèn)真的
/novel/234.html
開局獎(jiǎng)勵(lì)七張人物卡
/novel/233.html
被召喚到異界的喪尸
/novel/232.html
........

最后


本文匯總BeautifulSoup常用的基本語法,并結(jié)合Python進(jìn)行舉例演示

最后實(shí)戰(zhàn)講解BeautifulSoup在爬蟲中的應(yīng)用。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    人妻亚洲一区二区三区| 99久久免费看国产精品| 久久99夜色精品噜噜亚洲av | 亚洲欧洲成人精品香蕉网| 黄色激情视频中文字幕| 在线精品首页中文字幕亚洲| 欧美精品一区二区三区白虎| 九九热这里只有精品哦| 91熟女大屁股偷偷对白| 超薄肉色丝袜脚一区二区| 免费黄片视频美女一区| 粉嫩国产一区二区三区在线| 国产成人在线一区二区三区 | 五月天丁香亚洲综合网| 国产午夜精品美女露脸视频| 黑人巨大精品欧美一区二区区| 精品一区二区三区乱码中文| 国产精品十八禁亚洲黄污免费观看 | 大香伊蕉欧美一区二区三区| 亚洲一区二区三区三区| 天堂网中文字幕在线观看| 在线懂色一区二区三区精品| 91精品视频免费播放| 婷婷色香五月综合激激情| 国产日产欧美精品视频| 国产传媒一区二区三区| 亚洲精品日韩欧美精品| 精品推荐久久久国产av| 婷婷基地五月激情五月| 国产免费观看一区二区| 亚洲精品偷拍一区二区三区| 九九九热视频免费观看| 日本人妻丰满熟妇久久| 国产一级不卡视频在线观看| 丰满少妇被猛烈撞击在线视频| 中文字幕乱码亚洲三区| 国产传媒一区二区三区| 色婷婷视频国产一区视频| 欧美日韩三区在线观看| 国产又粗又硬又大又爽的视频| 色婷婷在线视频免费播放|