欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像

 更新時間:2023年02月24日 10:12:29   作者:沒掉發(fā)的程序員  
我發(fā)布了一個通過FTP自動優(yōu)化新圖像的教程。這次我們將抓取整個網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織,怎么來操作呢,下面跟隨小編一起學(xué)習(xí)使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的方法,感興趣的朋友一起看看吧

我發(fā)布了一個通過FTP自動優(yōu)化新圖像的教程。這次我們將抓取整個網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織。

請注意,這個簡短但中級的腳本不適用于大型站點。首先,所有圖像都轉(zhuǎn)儲到一個文件夾中。為每個頁面創(chuàng)建一個新文件夾并不困難,但即便如此,您也可能有數(shù)量無法管理的文件夾。未優(yōu)化的圖像仍然是未通過 Web 核心指標(biāo)的罪魁禍?zhǔn)?。讓我們開始!

要求和假設(shè)

  • 已安裝 Python 3 并理解基本的 Python 語法

  • 訪問Linux安裝(我推薦Ubuntu)或?qū)毸?/li>

安裝模塊

在我們開始之前,請記住注意您在此處復(fù)制的任何內(nèi)容的縮進(jìn),因為有時代碼片段無法完美復(fù)制。下面的所有模塊都應(yīng)該在核心Python 3中。我發(fā)現(xiàn)我需要將 PIL 更新到最新版本 8.2,您可以通過終端中的以下命令執(zhí)行此操作(如果使用 Google Colab,請在開頭加上感嘆號):

另外,我們需要安裝 Elias Dabbas的 advertools 模塊

pip3 install PIL --upgrade
pip3 install advertools
  • advertools:使用刮擦處理抓取
  • pandas:幫助規(guī)范化爬網(wǎng)數(shù)據(jù)
  • os:用于制作映像目錄
  • requests:用于下載圖像
  • PIL:處理圖像壓縮
  • shutil:處理在本地保存圖像

導(dǎo)入 Python 模塊

讓我們首先導(dǎo)入上面描述的這個腳本所需的模塊。

import advertools as adv
import pandas as pd
import os 
import requests # to get image from the web
import shutil # to save it locally
from PIL import Image
import PIL

啟動網(wǎng)絡(luò)爬網(wǎng)

我們需要做的第一件事是定義網(wǎng)絡(luò)爬蟲的起始 URL。99%的時間這應(yīng)該是你的主頁。然后我們在advertools中運行adv.crawl()函數(shù),并將輸出保存為crawl.jl,然后將其加載到crawlme數(shù)據(jù)幀中。此過程可能需要幾分鐘,具體取決于您的網(wǎng)站有多大。我不建議在頁面或圖像超過數(shù)萬個的非常大的網(wǎng)站上使用此腳本。一般來說,爬蟲非常快,只需幾秒鐘即可處理這個博客。另外,請注意,某些使用 Cloudflare 或其他防火墻的站點最終可能會在某個時候被阻止。

site_url = 'https://importsem.com'

adv.crawl(site_url, 'crawl.jl', follow_links=True)

crawlme = pd.read_json('crawl.jl', lines=True)

規(guī)范化和修剪爬網(wǎng)數(shù)據(jù)

使用我們的數(shù)據(jù)幀,我們可以開始規(guī)范化和修剪數(shù)據(jù),使其僅滿足我們的需要。通常有很多 nan 和空白值,因此我們刪除這些行。

crawlme.dropna(how='all')
crawlme.drop(crawlme[crawlme['canonical'] == 'nan'].index, inplace = True)
crawlme.drop(crawlme[crawlme['img_src'] == ''].index, inplace = True)
crawlme.reset_index(inplace = True)

爬網(wǎng)數(shù)據(jù)幀包含大量爬網(wǎng)數(shù)據(jù)。出于我們的目的,我們只需要規(guī)范列和img_src列。我們選擇這些列并將它們轉(zhuǎn)換為字典對象。

url_images = crawlme[['canonical','img_src']].to_dict()

接下來,我們設(shè)置一個計數(shù)器來幫助循環(huán)訪問圖像鍵和一個名為 dupes 的列表變量來存儲我們已經(jīng)處理過的圖像的 URL,這樣我們就不會再次處理它們。

x = 0

dupes = []

創(chuàng)建輸出文件夾

現(xiàn)在我們希望創(chuàng)建兩個文件夾。一個用于存儲原始文件,以防您需要還原它們,另一個文件夾用于存儲優(yōu)化的圖像。如果這些文件夾已經(jīng)存在,它只是將路徑發(fā)送到變量中。

try:
  path = os.getcwd() + "/images/"
  optpath = os.getcwd() + "/images_opt/"
  os.mkdir(path)
  os.mkdir(optpath)
except:
  path = os.getcwd() + "/images/"
  optpath = os.getcwd() + "/images_opt/"

處理圖像的網(wǎng)址

現(xiàn)在是時候處理 URL 了。我們遍歷規(guī)范密鑰中的 URL。然后我們使用計數(shù)器變量將其與img_src鍵匹配。每個 URL 的圖像用“@@”分隔。因此,我們將img_src字符串拆分為“@@”,這變成了一個列表。

for key in url_images['canonical'].items():

print(key[1])

images = url_images['img_src'][x].split('@@')

在處理 URL 的img_src列表之前,我們希望將主頁的圖像 URL 預(yù)加載到重復(fù)列表中。

if x == 0:

dupes = images

流程映像

現(xiàn)在,只要每個圖像未在重復(fù)列表中列出,我們就會對其進(jìn)行處理。這確保了我們不會一遍又一遍地處理相同的圖像。常見的情況是設(shè)計框架圖像和徽標(biāo),可以在每個頁面上找到。這些將在找到它們的第一個 URL 上處理,然后不會再次處理。我們通過反斜杠拆分字符串來獲取圖像文件名,然后選擇創(chuàng)建的最后一個列表項,這將是文件名。然后使用請求模塊下載并解碼文件。

for i in images:

if i not in dupes or x == 0:

filename = i.split("/")[-1]

r = requests.get(i, stream = True)

r.raw.decode_content = True

如果圖像下載成功,我們將文件保存到我們之前設(shè)置的文件夾中。

if r.status_code == 200:

with open(path + filename,'wb') as f:

shutil.copyfileobj(r.raw, f)

優(yōu)化圖像

將圖像下載到原始圖像文件夾中后,我們在本地打開它并使用PIL模塊對其進(jìn)行處理,并將優(yōu)化的輸出保存在我們之前設(shè)置的優(yōu)化圖像文件夾中。使用質(zhì)量參數(shù)。65 我通常很安全,但如果你看到圖像退化,你可以把它放低或需要提高它。如果需要,您還可以選擇調(diào)整圖像大小。只需使用 PIL 的 Image.resize() 函數(shù)即可。文檔在這里。

picture = Image.open(path + filename)

picture.save(optpath + filename, optimize=True, quality=65)

print('Image successfully downloaded and optimized: ',filename)

else:

print('Download Failed')

處理完 URL 的所有圖像后,我們將處理的任何 URL 與重復(fù)列表中包含的內(nèi)容進(jìn)行比較。如果某個網(wǎng)址不在重復(fù)列表中,則會添加該網(wǎng)址,因此如果在另一個網(wǎng)址上找到該網(wǎng)址,我們不會再次處理該網(wǎng)址。

if x != 0:

[dupes.append(z) for z in images if z not in dupes]

最后,我們輸出計數(shù)器進(jìn)行進(jìn)程跟蹤,并將計數(shù)器增加 1。然后,第一個 URL 循環(huán)再次啟動,并處理下一個 URL

print(x)

x += 1

示例輸出

結(jié)論

有了這個,您現(xiàn)在可以非??焖俚刈ト『蛢?yōu)化任何網(wǎng)站的文件。如果你有一個非常大的網(wǎng)站,你至少擁有構(gòu)建更健壯的東西所需的框架。

到此這篇關(guān)于如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的文章就介紹到這了,更多相關(guān)Python 抓取和優(yōu)化所有網(wǎng)站圖像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解

    這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。
    2017-11-11
  • python中的bool數(shù)組取反案例

    python中的bool數(shù)組取反案例

    這篇文章主要介紹了python中的bool數(shù)組取反案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python二維碼生成庫qrcode安裝和使用示例

    Python二維碼生成庫qrcode安裝和使用示例

    這篇文章主要介紹了Python二維碼生成庫qrcode安裝和使用示例,本文講解了qrcode的安裝、生成二維碼、生成帶圖標(biāo)的二維碼等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • 利用Django框架中select_related和prefetch_related函數(shù)對數(shù)據(jù)庫查詢優(yōu)化

    利用Django框架中select_related和prefetch_related函數(shù)對數(shù)據(jù)庫查詢優(yōu)化

    這篇文章主要介紹了利用Python的Django框架中select_related和prefetch_related函數(shù)對數(shù)據(jù)庫查詢的優(yōu)化的一個實踐例子,展示如何在實際中利用這兩個函數(shù)減少對數(shù)據(jù)庫的查詢次數(shù),需要的朋友可以參考下
    2015-04-04
  • python圖片格式轉(zhuǎn)換腳本

    python圖片格式轉(zhuǎn)換腳本

    大家好,本篇文章主要講的是python圖片格式轉(zhuǎn)換腳本,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    在之前的編程中,我們的信息打印,數(shù)據(jù)的展示都是在控制臺(命令行)直接輸出的,信息都是一次性的沒有辦法復(fù)用和保存以便下次查看,今天我們將學(xué)習(xí)Python的輸入輸出,解決以上問題
    2019-04-04
  • python創(chuàng)建學(xué)生管理系統(tǒng)

    python創(chuàng)建學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 基于python if 判斷選擇結(jié)構(gòu)的實例詳解

    基于python if 判斷選擇結(jié)構(gòu)的實例詳解

    代碼執(zhí)行結(jié)構(gòu)為順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這篇文章主要介紹了python if 判斷選擇結(jié)構(gòu)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • python使用imap-tools模塊下載郵件附件的示例

    python使用imap-tools模塊下載郵件附件的示例

    imap-tools模塊是python的第三方擴展,?它使用標(biāo)準(zhǔn)庫imaplib,并將常見的郵件處理事件封裝,郵件處理起來代碼短,下面給大家介紹下python使用imap-tools模塊下載郵件中的附件示例代碼,感興趣的朋友一起看看吧
    2021-12-12
  • Python OpenCV實現(xiàn)鼠標(biāo)畫框效果

    Python OpenCV實現(xiàn)鼠標(biāo)畫框效果

    這篇文章主要為大家詳細(xì)介紹了Python OpenCV實現(xiàn)鼠標(biāo)畫框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論