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

Python?使用BeautifulSoup庫的方法

 更新時間:2023年10月27日 09:47:47   作者:Lyshark  
BeautifulSoup庫用于從HTML或XML文件中提取數(shù)據(jù),它可以自動將復(fù)雜的HTML文檔轉(zhuǎn)換為樹形結(jié)構(gòu),并提供簡單的方法來搜索文檔中的節(jié)點,使得我們可以輕松地遍歷和修改HTML文檔的內(nèi)容,本文給大家介紹Python?使用BeautifulSoup庫的方法,感興趣的朋友一起看看吧

BeautifulSoup庫用于從HTML或XML文件中提取數(shù)據(jù)。它可以自動將復(fù)雜的HTML文檔轉(zhuǎn)換為樹形結(jié)構(gòu),并提供簡單的方法來搜索文檔中的節(jié)點,使得我們可以輕松地遍歷和修改HTML文檔的內(nèi)容。廣泛用于Web爬蟲和數(shù)據(jù)抽取應(yīng)用程序中。

讀者如果需要使用這個庫,同樣需要執(zhí)行pip命令用以安裝:

  • 安裝PIP包:pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple21.8.1 

屬性定位鏈接

通過HTML屬性我們可以輕松的實現(xiàn)對特定頁面特定元素的提取,如下代碼我們首先封裝兩個函數(shù),其中get_page_attrs函數(shù)用于一次性解析需求,函數(shù)search_page則用于多次對頁面進(jìn)行解析,這兩個函數(shù)如果傳入attribute屬性則用于提取屬性內(nèi)的參數(shù),而傳入text則用于提取屬性自身文本。

import requests
from bs4 import BeautifulSoup

header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98"}

# 參數(shù)1: 解析頁面URL
# 參數(shù)2: 需要解析的頁面定位
# 參數(shù)3: 提取標(biāo)簽屬性
# 參數(shù)4:設(shè)置超時時間
# 參數(shù)5:設(shè)置返回類型(attribute 返回屬性字段,text 返回文本字段)
def get_page_attrs(url,regx,attrs,timeout,type):
    respon_page = []
    try:
        respon = requests.get(url=url, headers=header, timeout=timeout)
        if respon.status_code == 200:
            if respon != None:
                soup = BeautifulSoup(respon.text, "html.parser")
                ret = soup.select(regx)
                for item in ret:
                    if type == "attribute":
                        respon_page.append( str(item.attrs[attrs] ))
                    if type == "text":
                        respon_page.append(str(item.get_text()))

            return respon_page
        else:
            return None
    except Exception:
        return None
    return None

# 對頁面多次搜索
# 參數(shù)1: 需要解析的html文本
# 參數(shù)2: 需要解析的頁面定位
# 參數(shù)3: 提取標(biāo)簽屬性
# 參數(shù)5:設(shè)置返回類型(attribute 返回屬性字段,text 返回文本字段)
def search_page(data,regx,attrs,type):
    respon_page = []
    if data != None:
        soup = BeautifulSoup(data, "html.parser")
        ret = soup.select(regx)
        for item in ret:
            if type == "attribute":
                respon_page.append( str(item.attrs[attrs] ))
            if type == "text":
                respon_page.append(str(item.get_text()))
    return respon_page

通過使用上述兩個封裝函數(shù),讀者就可以輕松的實現(xiàn)對特定網(wǎng)頁頁面元素的定位,首先我們通過CSS屬性定位一篇文章中的圖片鏈接,這段代碼如下;

if __name__ == "__main__":
    # 通過CSS屬性定位圖片
    ref = get_page_attrs("https://www.cnblogs.com/LyShark/p/15914868.html",
                   "#cnblogs_post_body > p > img",
                   "src",
                   5,
                   "attribute"
                   )
    print(ref)

當(dāng)上述代碼運行后,即可提取出特定網(wǎng)址鏈接內(nèi),屬性#cnblogs_post_body > p > img中圖片的src屬性,并提取出圖片屬性attribute自身參數(shù)。

接著我們繼續(xù)使用該函數(shù)實現(xiàn)定位文章列表功能,文章列表的定位同理,此處第二個參數(shù)應(yīng)修改為href屬性,如下代碼分別使用兩種方式實現(xiàn)對文章列表的定位功能;

if __name__ == "__main__":
    # 定位文章列表,兩種方式均可
    ref = get_page_attrs("https://www.cnblogs.com/lyshark",
                   "#mainContent > div > div > div.postTitle > a",
                   "href",
                   5,
                   "attribute"
                   )
    print(ref)
    ref = get_page_attrs("https://www.cnblogs.com/lyshark",
                   "div[class='day'] div[class='postCon'] div a",
                   "href",
                   5,
                   "attribute"
                   )
    print(ref)

代碼運行后即可輸出lyshark網(wǎng)站中主頁所有的文章地址信息,輸出如下圖所示;

當(dāng)需要定位文章內(nèi)容時,我們只需要將第二個屬性更改為空格,并將第四個屬性修改為text此時則代表只提取屬性內(nèi)的文本。

if __name__ == "__main__":
    # 定位文章文本字段
    ref = get_page_attrs("https://www.cnblogs.com/lyshark",
                   "div[class='day'] div[class='postCon'] div[class='c_b_p_desc']",
                   "",
                   5,
                   "text"
                   )
    for index in ref:
        print(index)

運行上述代碼片段,即可提取出主頁中所有的文本信息,如下圖所示;

如果需要在同一個頁面中多次定位那么就需要使用search_page函數(shù)了,如下代碼中我們需要在一個頁面內(nèi)尋找兩個元素,此時就需要定位兩次;

if __name__ == "__main__":
    respon = requests.get(url="https://yiyuan.9939.com/yyk_47122/", headers=header, timeout=5)
    ref = search_page(respon.text,
                      "body > div.hos_top > div > div.info > div.detail.word-break > h1 > a",
                      "",
                      "text"
                      )
    print(ref)
    ref = search_page(respon.text,
                      "body > div.hos_top > div > div.info > div.detail.word-break > div.tel > span",
                      "",
                      "text"
                      )
    print(ref)

代碼運行后,即可通過依次請求,分別輸出該頁面中的兩個元素,如下圖所示;

21.8.2 查詢所有標(biāo)簽

使用find_all函數(shù),可實現(xiàn)從HTMLXML文檔中查找所有符合指定標(biāo)簽和屬性的元素,返回一個列表,該函數(shù)從用于精確過濾,可同時將該頁中符合條件的數(shù)據(jù)一次性全部篩選出來。

其基本語法為:

find_all(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
  • name:標(biāo)簽名或列表,用于查找指定標(biāo)簽名的元素,如果為 True 或 None,則查找所有標(biāo)簽元素
  • attrs:字典,用于指定屬性名和屬性值,用于查找具有指定屬性名和屬性值的元素
  • recursive:布爾值,表示是否遞歸查找子標(biāo)簽,默認(rèn)為
  • Truetext:字符串或正則表達(dá)式,用于匹配元素的文本內(nèi)容
  • limit:整數(shù),限制返回的匹配元素的數(shù)量
  • kwargs:可變參數(shù),用于查找指定屬性名和屬性值的元素

我們以輸出CVE漏洞列表為例,通過使用find_all查詢頁面中所有的a標(biāo)簽,并返回一個列表,通過對列表元素的解析,依次輸出該漏洞的序號,網(wǎng)址,以及所對應(yīng)的編號信息。

import re
import requests
from bs4 import BeautifulSoup
header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98"}
# 查找文中 所有a標(biāo)簽 且類名是c_b_p_desc_readmore的 并提取出其href字段
# print(bs.find_all('a',class_='c_b_p_desc_readmore')[0]['href'])
# 提取 所有a標(biāo)簽 且id等于blog_nav_admin 類等于menu 并提取出其href字段
# print(bs.find_all('a',id='blog_nav_admin',class_='menu')[0]['href'])
# print(bs.find_all('a',id='blog_nav_admin',class_='menu')[0].attrs['href'])
if __name__ == "__main__":
    url = "https://cassandra.cerias.purdue.edu/CVE_changes/today.html"
    new_cve = []
    ret = requests.get(url=url, headers=header, timeout=5)
    soup = BeautifulSoup(ret.text, 'html.parser')
    for index in soup.find_all('a'):
        href = index.get('href')
        text = index.get_text()
        cve_number = re.findall("[0-9]{1,}-.*",index.get_text())
        print("序號: {:20} 地址: {} CVE-{}".format(text,href,cve_number[0]))

讀者可自行運行上述代碼,即可匹配出當(dāng)前頁面中所有的CVE漏洞編號等,如下圖所示;

21.8.3 取字串返回列表

在BeautifulSoup4中,stripped_strings是一個生成器對象,用于獲取HTML標(biāo)簽內(nèi)所有文本內(nèi)容的迭代器。它會自動去除每個文本的前后空格和換行符,只返回純文本字符串。stripped_strings可以用于處理HTML文檔中的多行文本、空格等特殊符號,也可用于將元素下面的所有字符串以列表的形式返回。

import requests
from bs4 import BeautifulSoup
header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98"}
if __name__ == "__main__":
    ret = requests.get(url="https://www.cnblogs.com/lyshark", headers=header, timeout=3)
    text = str(ret.content.decode('utf-8'))
    bs = BeautifulSoup(text, "html.parser")
    ret = bs.select('#mainContent > div > div > div.postTitle > a > span')
    for i in ret:
        # 提取出字符串并以列表的形式返回
        string_ = list(i.stripped_strings)
        print(string_)

運行后即可獲取選中元素的字符串內(nèi)容,并通過list將其轉(zhuǎn)換為列表格式,如下圖所示;

通過find_all以及stripped_strings屬性我們實現(xiàn)一個簡單的抓取天氣的代碼,以讓讀者可以更好的理解該屬性是如何被使用的,如下代碼所示;

from bs4 import BeautifulSoup
import requests

head = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
ret = requests.get(url="http://www.weather.com.cn/textFC/beijing.shtml", headers=head, timeout=3)
text = str(ret.content.decode('utf-8'))

bs = BeautifulSoup(text,"html.parser")

# 定位到第一個標(biāo)簽上
bs.find_all('div',class_='conMidtab')[1]

# 在conMidtab里面找tr標(biāo)簽并從第3個標(biāo)簽開始保存
tr = bs.find_all('tr')[2:]

for i in tr:
    # 循環(huán)找代碼中的所有td標(biāo)簽
    td = i.find_all('td')
    # 找所有的td標(biāo)簽,并找出第一個td標(biāo)簽
    city_td = td[0]
    # 獲取目標(biāo)路徑下所有的子孫非標(biāo)簽字符串,自動去掉空字符串
    city = list(city_td.stripped_strings)[0]
    # 取出度數(shù)的標(biāo)簽
    temp = td[-5]
    temperature = list(temp.stripped_strings)[0]
    print('城市:{}   溫度:{}'.format(city,temperature))

我們以提取北京天氣為案例,當(dāng)運行代碼后即可取出北京市所有地區(qū)的氣溫數(shù)據(jù),如下圖所示;

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

相關(guān)文章

  • 詳解Python如何實現(xiàn)Excel數(shù)據(jù)讀取和寫入

    詳解Python如何實現(xiàn)Excel數(shù)據(jù)讀取和寫入

    這篇文章主要為大家詳細(xì)介紹了python如何實現(xiàn)對EXCEL數(shù)據(jù)進(jìn)行讀取和寫入,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • python里的單引號和雙引號的有什么作用

    python里的單引號和雙引號的有什么作用

    在本篇文章里小編給大家分享的是一篇關(guān)于python里的單引號和雙引號的作用的相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 淺談python日志的配置文件路徑問題

    淺談python日志的配置文件路徑問題

    下面小編就為大家分享一篇淺談python日志的配置文件路徑問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python異步存儲數(shù)據(jù)詳解

    python異步存儲數(shù)據(jù)詳解

    這篇文章主要為大家詳細(xì)介紹了python異步存儲數(shù)據(jù)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Flask框架編寫文件下載接口過程講解

    Flask框架編寫文件下載接口過程講解

    這篇文章主要介紹了Flask框架編寫文件下載接口的過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • Python編程實現(xiàn)小姐姐跳舞并生成詞云視頻示例

    Python編程實現(xiàn)小姐姐跳舞并生成詞云視頻示例

    本文用Python做了一個詞云視頻,以另一種角度來看小姐姐跳舞視頻左半部分是小姐姐跳舞視頻,右半部分是根據(jù)動作生成的的詞云視頻,有需要的朋友可以借鑒參考下
    2021-10-10
  • matplotlib制作雷達(dá)圖報錯ValueError的實現(xiàn)

    matplotlib制作雷達(dá)圖報錯ValueError的實現(xiàn)

    這篇文章主要介紹了matplotlib制作雷達(dá)圖報錯ValueError的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python中l(wèi)ogging模塊用法示例總結(jié)

    Python中l(wèi)ogging模塊用法示例總結(jié)

    在Python中l(wèi)ogging模塊是一個強(qiáng)大的日志記錄工具,它允許用戶將程序運行期間產(chǎn)生的日志信息輸出到控制臺或者寫入到文件中,這篇文章主要介紹了Python中l(wèi)ogging模塊用法的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • Python對Excel不同的行分別復(fù)制不同的次數(shù)

    Python對Excel不同的行分別復(fù)制不同的次數(shù)

    這篇文章主要介紹了如何利用Python實現(xiàn)讀取Excel表格文件數(shù)據(jù),并將其中符合我們特定要求的那一行加以復(fù)制指定的次數(shù),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-07-07
  • 解決Python3用PIL的ImageFont輸出中文亂碼的問題

    解決Python3用PIL的ImageFont輸出中文亂碼的問題

    今天小編大家分享一篇解決Python3用PIL的ImageFont輸出中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論

策勒县| 化德县| 丰县| 清丰县| 昆山市| 仁寿县| 五大连池市| 合川市| 松溪县| 五台县| 林甸县| 鹤壁市| 临沧市| 正镶白旗| 贵定县| 岫岩| 新源县| 晋中市| 偏关县| 手机| 淄博市| 桃源县| 武乡县| 句容市| 永年县| 庆城县| 宝鸡市| 石门县| 南涧| 宁明县| 尚志市| 东莞市| 舟曲县| 洱源县| 贵港市| 耿马| 莲花县| 运城市| 安徽省| 桃园市| 唐海县|