国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

21.8 Python 使用BeautifulSoup庫

這篇具有很好參考價(jià)值的文章主要介紹了21.8 Python 使用BeautifulSoup庫。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

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

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

21.8.1 屬性定位鏈接

通過HTML屬性我們可以輕松的實(shí)現(xiàn)對(duì)特定頁面特定元素的提取,如下代碼我們首先封裝兩個(gè)函數(shù),其中get_page_attrs函數(shù)用于一次性解析需求,函數(shù)search_page則用于多次對(duì)頁面進(jìn)行解析,這兩個(gè)函數(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í)時(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

# 對(duì)頁面多次搜索
# 參數(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

通過使用上述兩個(gè)封裝函數(shù),讀者就可以輕松的實(shí)現(xiàn)對(duì)特定網(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)上述代碼運(yùn)行后,即可提取出特定網(wǎng)址鏈接內(nèi),屬性#cnblogs_post_body > p > img中圖片的src屬性,并提取出圖片屬性attribute自身參數(shù)。

21.8 Python 使用BeautifulSoup庫

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

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)

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

21.8 Python 使用BeautifulSoup庫

當(dāng)需要定位文章內(nèi)容時(shí),我們只需要將第二個(gè)屬性更改為空格,并將第四個(gè)屬性修改為text此時(shí)則代表只提取屬性內(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)

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

21.8 Python 使用BeautifulSoup庫

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

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)

代碼運(yùn)行后,即可通過依次請(qǐng)求,分別輸出該頁面中的兩個(gè)元素,如下圖所示;

21.8 Python 使用BeautifulSoup庫

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

使用find_all函數(shù),可實(shí)現(xiàn)從HTMLXML文檔中查找所有符合指定標(biāo)簽和屬性的元素,返回一個(gè)列表,該函數(shù)從用于精確過濾,可同時(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)為 True
  • text:字符串或正則表達(dá)式,用于匹配元素的文本內(nèi)容
  • limit:整數(shù),限制返回的匹配元素的數(shù)量
  • kwargs:可變參數(shù),用于查找指定屬性名和屬性值的元素

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

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("序號(hào): {:20} 地址: {} CVE-{}".format(text,href,cve_number[0]))

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

21.8 Python 使用BeautifulSoup庫

21.8.3 取字串返回列表

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

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_)

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

21.8 Python 使用BeautifulSoup庫

通過find_all以及stripped_strings屬性我們實(shí)現(xiàn)一個(gè)簡(jiǎ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")

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

# 在conMidtab里面找tr標(biāo)簽并從第3個(gè)標(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)簽,并找出第一個(gè)td標(biāo)簽
    city_td = td[0]
    # 獲取目標(biāo)路徑下所有的子孫非標(biāo)簽字符串,自動(dòng)去掉空字符串
    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)運(yùn)行代碼后即可取出北京市所有地區(qū)的氣溫?cái)?shù)據(jù),如下圖所示;

21.8 Python 使用BeautifulSoup庫文章來源地址http://www.zghlxwxcb.cn/news/detail-711290.html

到了這里,關(guān)于21.8 Python 使用BeautifulSoup庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python3 爬蟲相關(guān)學(xué)習(xí)7:初步摸索使用 BeautifulSoup

    python3 爬蟲相關(guān)學(xué)習(xí)7:初步摸索使用 BeautifulSoup

    目錄 1 一個(gè)爬圖片pic的代碼的例子 1.1 學(xué)習(xí)的原文章 1.2 原始代碼的問題總結(jié) 問題1 問題2 問題3 其他問題 1.3 原始代碼 2? 直接在cmd里 python運(yùn)行報(bào)錯(cuò) 和 處理 2.1 運(yùn)行報(bào)錯(cuò) 2.2 報(bào)錯(cuò)原因: 沒有提前安裝這個(gè)bs4? 模塊 2.3 如何提前知道我的python環(huán)境下有沒有安裝bs4 或其他模塊呢

    2024年02月08日
    瀏覽(29)
  • 【Python beautifulsoup】詳細(xì)介紹beautifulsoup庫的使用方法,包括安裝方式、基本用法、常用方法和技巧,以及結(jié)合lxml和parsel的具體使用場(chǎng)景和區(qū)別。

    【Python beautifulsoup】詳細(xì)介紹beautifulsoup庫的使用方法,包括安裝方式、基本用法、常用方法和技巧,以及結(jié)合lxml和parsel的具體使用場(chǎng)景和區(qū)別。

    Python beautifulsoup庫是一個(gè)強(qiáng)大的Web抓取和解析庫,它提供了豐富的功能和簡(jiǎn)單易用的API,可以幫助我們處理HTML和XML文檔,從中提取數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗和處理。beautifulsoup庫基于Python標(biāo)準(zhǔn)庫中的html.parser模塊,同時(shí)還可以與第三方解析庫lxml和parsel配合使用,提供更高效和靈活的

    2024年02月04日
    瀏覽(53)
  • Python實(shí)戰(zhàn):使用selenium及BeautifulSoup4進(jìn)行BOOS直聘信息爬取與數(shù)據(jù)累積【附源碼】

    操作系統(tǒng) :適用于Windows、macOS、Linux。 Python版本 :Python 3.6及以上。 依賴庫 : selenium:用于模擬瀏覽器操作。 webdriver_manager:自動(dòng)管理驅(qū)動(dòng)程序。 BeautifulSoup4:解析HTML頁面。 pandas:數(shù)據(jù)處理和CSV文件操作。 logging:日志記錄。 本項(xiàng)目旨在通過Selenium模擬用戶瀏覽器行為,獲

    2024年04月27日
    瀏覽(34)
  • 使用Python的Requests和BeautifulSoup庫來爬取新聞網(wǎng)站的新聞標(biāo)題、發(fā)布時(shí)間、內(nèi)容等信息,并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中

    BeautifulSoup是Python的一個(gè)HTML/XML解析庫,用于從HTML或XML文件中提取數(shù)據(jù)。結(jié)合Python的requests庫,可以實(shí)現(xiàn)網(wǎng)頁爬取和數(shù)據(jù)提取。 以下是一個(gè)簡(jiǎn)單的使用BeautifulSoup和requests庫實(shí)現(xiàn)爬蟲的示例: ? 用requests庫和BeautifulSoup4庫,爬取校園新聞列表的時(shí)間、標(biāo)題、鏈接、來源。

    2024年02月10日
    瀏覽(32)
  • 用于黑客滲透測(cè)試的 21 個(gè)最佳 Kali Linux 工具

    用于黑客滲透測(cè)試的 21 個(gè)最佳 Kali Linux 工具

    如果你讀過 Kali Linux 點(diǎn)評(píng),你就知道為什么它被認(rèn)為是最好的黑客滲透測(cè)試的 Linux 發(fā)行版之一,而且名副其實(shí)。它帶有許多工具,使你可以更輕松地測(cè)試、破解以及進(jìn)行與數(shù)字取證相關(guān)的任何其他工作。 它是道德黑客ethical hacker最推薦的 Linux 發(fā)行版之一。即使你不是黑客而

    2024年02月10日
    瀏覽(23)
  • Python之BeautifulSoup庫詳解

    Python之BeautifulSoup庫詳解

    一、簡(jiǎn)介 BeautifulSoup是一個(gè)靈活方便的網(wǎng)頁解析庫,處理高效,能夠自動(dòng)的將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼,且支持多種解析器。其最主要的功能是從網(wǎng)頁抓取數(shù)據(jù)。 二、解析器 解析器 使用方法 優(yōu)勢(shì) 劣勢(shì) Python標(biāo)準(zhǔn)庫 BeautifulSoup(markup, ‘html.parser’) p

    2024年02月02日
    瀏覽(17)
  • Python-BeautifulSoup用法

    BeautifulSoup4將復(fù)雜HTML文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都是Python對(duì)象,所有對(duì)象可以歸納為4種: Tag NavigableString BeautifulSoup Comment 我們可以利用 soup 加標(biāo)簽名輕松地獲取這些標(biāo)簽的內(nèi)容,這些對(duì)象的類型是bs4.element.Tag。但是注意,它查找的是在所有內(nèi)容中的第一個(gè)符合要

    2024年02月08日
    瀏覽(16)
  • 21.1 使用PEfile分析PE文件

    PeFile模塊是 Python 中一個(gè)強(qiáng)大的便攜式第三方 PE 格式分析工具,用于解析和處理 Windows 可執(zhí)行文件。該模塊提供了一系列的API接口,使得用戶可以通過 Python 腳本來讀取和分析PE文件的結(jié)構(gòu),包括文件頭、節(jié)表、導(dǎo)入表、導(dǎo)出表、資源表、重定位表等等。此外,PEfile模塊還可以

    2024年02月13日
    瀏覽(20)
  • 【100天精通python】Day21:文件及目錄操作_文件的權(quán)限處理和批量處理

    目錄 專欄導(dǎo)讀? 1. 文件的權(quán)限處理 1.1 查詢文件權(quán)限 1.2 修改文件權(quán)限

    2024年02月14日
    瀏覽(30)
  • [Python http.server] 搭建http服務(wù)器用于下載/上傳文件

    [Python http.server] 搭建http服務(wù)器用于下載/上傳文件

    動(dòng)機(jī): 筆者需測(cè)試bs架構(gòu)下的文件上傳與下載性能,故想通過Python搭建http服務(wù)器并實(shí)現(xiàn)客戶端與服務(wù)器之間的文件上傳和下載需求 難點(diǎn): 這應(yīng)該是很基礎(chǔ)的東西,不過筆者之前未接觸過http編程,謹(jǐn)在此記錄下學(xué)習(xí)的過程,可能不是最優(yōu)解 方法: 在服務(wù)器端部署html頁面,并

    2024年02月11日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包