最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?頁面解析Beautiful?Soup庫的使用方法

 更新時間:2022年09月09日 08:49:06   作者:小嗷犬  
Beautiful?Soup?簡稱?BS4(其中?4?表示版本號)是一個?Python?中常用的頁面解析庫,它可以從?HTML?或?XML?文檔中快速地提取指定的數(shù)據(jù),這篇文章主要介紹了springboot?集成?docsify?實現(xiàn)隨身文檔?,需要的朋友可以參考下

1.Beautiful Soup庫簡介

Beautiful Soup 簡稱 BS4(其中 4 表示版本號)是一個 Python 中常用的頁面解析庫,它可以從 HTML 或 XML 文檔中快速地提取指定的數(shù)據(jù)。

相比于之前講過的 lxml 庫,Beautiful Soup 更加簡單易用,不像正則和 XPath 需要刻意去記住很多特定語法,盡管那樣會效率更高更直接。

對大多數(shù) Python 使用者來說,好用會比高效更重要。

Beautiful Soup庫為第三方庫,需要我們通過pip命令安裝:

pip install bs4

BS4 解析頁面時需要依賴文檔解析器,所以還需要一個文檔解析器。
Python 自帶了一個文檔解析庫 html.parser, 但是其解析速度稍慢,所以我們結(jié)合上篇內(nèi)容(Python 文檔解析:lxml庫的使用),安裝 lxml 作為文檔解析庫:

pip install lxml

2.Beautiful Soup庫方法介紹

使用 bs4 的初始化操作,是用文本創(chuàng)建一個 BeautifulSoup 對象,并指定文檔解析器:

from bs4 import BeautifulSoup

html_str = '''
<div>
    <ul>
        <li class="web" id="0"><a href="www.python.org" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Python</a></li>
        <li class="web" id="1"><a href="www.java.com" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Java</a></li>
        <li class="web" id="2"><a href="www.csdn.net" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >CSDN</a></li>
    </ul>
</div>
'''
soup = BeautifulSoup(html_str, 'lxml')
# prettify()用于格式化輸出HTML/XML文檔
print(soup.prettify())

bs4 提供了find_all()find()兩個常用的查找方法它們的用法如下:

2.1 find_all()

find_all() 方法用來搜索當(dāng)前 tag 的所有子節(jié)點,并判斷這些節(jié)點是否符合過濾條件,最后以列表形式將符合條件的內(nèi)容返回,語法格式如下:

find_all(name, attrs, recursive, text, limit)

參數(shù)說明:

name:查找所有名字為 name 的 tag 標(biāo)簽,字符串對象會被自動忽略。attrs:按照屬性名和屬性值搜索 tag 標(biāo)簽,注意由于 class 是 Python 的關(guān)鍵字,所以要使用 “class_”。recursive:find_all() 會搜索 tag 的所有子孫節(jié)點,設(shè)置 recursive=False 可以只搜索 tag 的直接子節(jié)點。text:用來搜文檔中的字符串內(nèi)容,該參數(shù)可以接受字符串 、正則表達(dá)式 、列表、True。limit:由于 find_all() 會返回所有的搜索結(jié)果,這樣會影響執(zhí)行效率,通過 limit 參數(shù)可以限制返回結(jié)果的數(shù)量。
from bs4 import BeautifulSoup

html_str = '''
<div>
    <ul>
        <li class="web" id="0"><a href="www.python.org" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Python</a></li>
        <li class="web" id="1"><a href="www.java.com" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Java</a></li>
        <li class="web" id="2"><a href="www.csdn.net" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >CSDN</a></li>
    </ul>
</div>
'''
soup = BeautifulSoup(html_str, 'lxml')

print(soup.find_all("li"))
print(soup.find_all("a"))
print(soup.find_all(text="Python"))

上面程序使用 find_all() 方法,來查找頁面中所有的<li></li>標(biāo)簽、<a></a>標(biāo)簽和"Python"字符串內(nèi)容。

2.2 find()

find() 方法與 find_all() 方法極其相似,不同之處在于 find() 僅返回第一個符合條件的結(jié)果,因此 find() 方法也沒有limit參數(shù),語法格式如下:

find(name, attrs, recursive, text)

除了和 find_all() 相同的使用方式以外,bs4find() 方法提供了一種簡寫方式:

soup.find("li")
soup.li

這兩行代碼的功能相同,都是返回第一個<li></li>標(biāo)簽,完整程序:

from bs4 import BeautifulSoup

html_str = '''
<div>
    <ul>
        <li class="web" id="0"><a href="www.python.org" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Python</a></li>
        <li class="web" id="1"><a href="www.java.com" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Java</a></li>
        <li class="web" id="2"><a href="www.csdn.net" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >CSDN</a></li>
    </ul>
</div>
'''
soup = BeautifulSoup(html_str, 'lxml')

print(soup.li)
print(soup.a)

上面的程序會打印出第一個<li></li>標(biāo)簽和第一個<a></a>標(biāo)簽。

2.3 select()

bs4 支持大部分的 CSS 選擇器,比如常見的標(biāo)簽選擇器、類選擇器、id 選擇器,以及層級選擇器。Beautiful Soup 提供了一個 select() 方法,通過向該方法中添加選擇器,就可以在 HTML 文檔中搜索到與之對應(yīng)的內(nèi)容。

應(yīng)用如下:

from bs4 import BeautifulSoup

html_str = '''
<div>
    <ul>
        <li class="web" id="web0"><a href="www.python.org" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Python</a></li>
        <li class="web" id="web1"><a href="www.java.com" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Java</a></li>
        <li class="web" id="web2"><a href="www.csdn.net" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >CSDN</a></li>
    </ul>
</div>
'''
soup = BeautifulSoup(html_str, 'lxml')
#根據(jù)元素標(biāo)簽查找
print(soup.select('body'))
#根據(jù)屬性選擇器查找
print(soup.select('a[href]'))
#根據(jù)類查找
print(soup.select('.web'))
#后代節(jié)點查找
print(soup.select('div ul'))
#根據(jù)id查找
print(soup.select('#web1'))

更多方法及其詳細(xì)使用說明,請參見官方文檔:
https://beautiful-soup-4.readthedocs.io/en/latest/

3.代碼實例

學(xué)會了 Beautiful Soup ,讓我們試著改寫一下上次的爬蟲代碼吧:

import os
import sys
import requests
from bs4 import BeautifulSoup

x = requests.get('https://www.csdn.net/')

soup = BeautifulSoup(x.text, 'lxml')

img_list = soup.select('img[src]')

# 創(chuàng)建img文件夾
os.chdir(os.path.dirname(sys.argv[0]))

if not os.path.exists('img'):
    os.mkdir('img')
    print('創(chuàng)建文件夾成功')
else:
    print('文件夾已存在')

# 下載圖片
for i in range(len(img_list)):
    item = img_list[i]['src']
    img = requests.get(item).content
    if item.endswith('jpg'):
        with open(f'./img/{i}.jpg', 'wb') as f:
            f.write(img)
    elif item.endswith('jpeg'):
        with open(f'./img/{i}.jpeg', 'wb') as f:
            f.write(img)
    elif item.endswith('png'):
        with open(f'./img/{i}.png', 'wb') as f:
            f.write(img)
    else:
        print(f'第{i + 1}張圖片格式不正確')
        continue
    print(f'第{i + 1}張圖片下載成功')

這就是本文的全部內(nèi)容了,快去動手試試吧!

到此這篇關(guān)于Python 頁面解析Beautiful Soup庫的使用的文章就介紹到這了,更多相關(guān)Python  Beautiful Soup庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows下Sqlmap環(huán)境安裝教程詳解

    Windows下Sqlmap環(huán)境安裝教程詳解

    這篇文章主要介紹了Windows下Sqlmap環(huán)境安裝,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • python如何對實例屬性進(jìn)行類型檢查

    python如何對實例屬性進(jìn)行類型檢查

    這篇文章主要為大家詳細(xì)介紹了python如何對實例屬性進(jìn)行類型檢查,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python海象運(yùn)算符的用法教程

    Python海象運(yùn)算符的用法教程

    Python 海象運(yùn)算符是在 PEP 572 中提出,并在 Python3.8 版本并入和發(fā)布。本文就來為大家詳細(xì)講講Python海象運(yùn)算符的用法,感興趣的可以了解一下
    2022-07-07
  • Python+redis通過限流保護(hù)高并發(fā)系統(tǒng)

    Python+redis通過限流保護(hù)高并發(fā)系統(tǒng)

    這篇文章主要介紹了Python+redis通過限流保護(hù)高并發(fā)系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 淺談Python numpy創(chuàng)建空數(shù)組的問題

    淺談Python numpy創(chuàng)建空數(shù)組的問題

    今天遇到一個小小的問題,是關(guān)于numpy創(chuàng)建空數(shù)組,今天特地整理了這篇文章,文中作出了非常詳細(xì)的介紹,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python 限制線程的最大數(shù)量的方法(Semaphore)

    Python 限制線程的最大數(shù)量的方法(Semaphore)

    今天小編就為大家分享一篇Python 限制線程的最大數(shù)量的方法(Semaphore),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • yolov5特征圖可視化的使用步驟

    yolov5特征圖可視化的使用步驟

    這篇文章主要介紹了yolov5特征圖可視化,本文通過實例代碼給大家介紹yolov5特征圖可視化使用方法,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • python中的sort方法使用詳解

    python中的sort方法使用詳解

    這篇文章主要介紹了python中的sort方法,需要的朋友可以參考下
    2014-07-07
  • 利用python實現(xiàn)周期財務(wù)統(tǒng)計可視化

    利用python實現(xiàn)周期財務(wù)統(tǒng)計可視化

    這篇文章主要給大家介紹了關(guān)于如何利用python實現(xiàn)周期財務(wù)統(tǒng)計可視化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 如何使用python切換hosts文件

    如何使用python切換hosts文件

    這篇文章主要介紹了如何使用python切換hosts文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04

最新評論

清新县| 华亭县| 五原县| 通许县| 梁平县| 景德镇市| 江阴市| 贵州省| 麦盖提县| 纳雍县| 泸水县| 文安县| 南华县| 白山市| 邯郸市| 南昌县| 宾阳县| 镇安县| 珠海市| 青龙| 东平县| 西畴县| 渝中区| 桓台县| 桃源县| 大邑县| 莱阳市| 顺平县| 神农架林区| 叶城县| 新余市| 玉树县| 广昌县| 常山县| 定州市| 巩义市| 德化县| 靖州| 桂平市| 岢岚县| 会理县|