python爬蟲爬取圖片代碼,python最簡易入門圖片_初學Python只需4步,爬取網站圖片

 2023-12-10 阅读 32 评论 0

摘要:很多人學習Python很重要的一個原因是,可以很簡單的把一個網站的數據爬下來。python爬蟲爬取圖片代碼。尤其是電商行業。領導:弄一個買賣游戲周邊商品的交易APP出來。python教學?我:行,那我們賣什么呀?領導:看下友商賣什么我們就賣

很多人學習Python很重要的一個原因是,可以很簡單的把一個網站的數據爬下來。

python爬蟲爬取圖片代碼。尤其是電商行業。

領導:弄一個買賣游戲周邊商品的交易APP出來。

python教學?我:行,那我們賣什么呀?

領導:看下友商賣什么我們就賣什么。

我:好吧,那就爬點數據下來吧。

玩笑歸玩笑,雖有夸張成分,但也不無道理。

作為入門級別,首先就來學習下怎么爬取網站圖片。只需要調用4個方法,即可輕松批量拿到網站圖片。

對Python感興趣或者是正在學習的小伙伴,可以加入我們的Python學習扣qun:784758214,從0基礎的python腳本到web開發、爬蟲、django、數據挖掘數據分析等,0基礎到項目實戰的資料都有整理。送給每一位python的小伙伴!每晚分享一些學習的方法和需要注意的小細節,學習路線規劃,利用編程賺外快。

下面對于每一步調用的方法進行詳細說明(主要還是自己拿了別人代碼之后遇到的坑)

第一步:獲取網頁的源代碼

urllib.request.urlopen().read()

這個方法是獲取到請求的這個URL所返回的網頁源代碼信息數據,返回值是bytes類型時,要將其轉換成utf-8才能正常顯示在python程序中,所以還要調用decode()方法進行解碼。

最終得到的就是平時我們編寫或者查看的頁面源代碼了。

這里可能會出現的報錯信息:

1.Non-ASCII character '\xe5'

原因:這是編碼的問題,Python的默認編碼文件是用的ASCII碼,而你的Python文件中使用了中文等非英語字符。

解決方法:在第一行添加 # -- coding: UTF-8 --

2.如果爬取的網站是https協議的,需要在請求時會驗證一次SSL證書

解決方法:全局加上以下代碼

第二步:過濾出圖片URL

這一步至為關鍵,因為在一堆網頁源代碼中,要有效找出目標對象(圖片URL)的特點(結構特征)才行。怎么找?

1.了解圖片URL的html表達方式

學過html的同學都知道,圖片的標簽是,src屬性定義其圖片源路徑。

2.使用正則表達式進行匹配

我也沒有詳細了解過正則表達式各個符號的含義,這里不展開講。

這里的正則表達式的意思是,過濾出所有標簽是,旗下的src屬性,且屬性值是以http開頭jpg結尾的源代碼。

每個網站的規則都不一樣,不能直接套用代碼。

簡單例子,你要爬取的網站圖片是png格式,直接拿代碼去運行肯定是什么都抓不到的。

再例如,我在一開始設定的規則中是沒有加上http開頭的,結果抓到一些圖片URL是相對路徑的數據,導致后面是無法訪問URL報錯的。

3.將所有匹配規則的代碼存入list里

re.compile() 根據包含的正則表達式的字符串創建模式對象(直接拿來用就好)

findall() 返回string中所有與pattern相匹配的全部字串,返回形式為數組

我們試一下打印出來imglist是什么結果,看是不是就把所有匹配規則的內容全部找出來呢!

第三步:定義圖片保存路徑

這一步看個人習慣,如果只是少數幾張圖片,就沒有必要新建一個文件夾給圖片都保存整理到一起。

不過如果是爬一個網站或一個網頁相對數量級比較大的時候,建議還是全部整理到一個文件夾里面,好管理嘛。

“新建文件夾”這個基礎的操作,就調用os.makedirs()方法即可。

但是這里有3個注意的點:

1.新建文件夾,你是希望指定路徑還是在當前路徑下創建?

指定路徑:很簡單,直接把你想要創建文件夾的路徑復制出來,加上新建文件夾的名稱,作為參數直接寫到方法里即可。

eg.(windows)

當前路徑:先獲取當前的目錄,再拼接上新建文件夾的名稱。

獲取當前目錄的方式是:os.getcwd()

eg.

2.新建的文件夾是否已存在?

相同目錄下不能有重名的文件/文件夾,如果直接創建的話,就會報錯:文件已存在,無法創建。

3.是否需要考慮windows和macOS的路徑表述方式不一樣?

注意一下,兩個操作系統對于路徑的表述方式是不一樣的,尤其是指定路徑,要輸入正確的路徑才能創建成功。

第四步:將圖片URL保存到文件夾下

現在,圖片URL已經存入到list里(見第2步)、保存圖片的文件夾也有了,就可以將虛擬的圖片url轉換成真實的png或jpg文件。

urllib.request.urlretrieve(url, filename) 這個方法就是將遠程數據下載到本地

url:遠程或本地的url,對應這里就是要放圖片URL了。

filename:保存的完整地方,即“路徑+文件名”。如果未指定該參數,urllib會生成一個臨時文件來保存數據。

這里要注意3個地方:

1.圖片的文件名怎么生成?

建議使用最簡單的方式來生成文件名:遞增數字+圖片后綴

這里就再次說明要新建文件夾的重要性,新建文件夾后,這個目錄下是全新空白的,不用考慮生成的文件名會不會和原有文件名重復的問題。

遞增數字:譬如說,第一張圖片叫“1.jpg”,第二張圖片叫“2.jpg”,如此類推。

2.一般網站爬下來的圖片是多張的,如何批量處理?

這里也說明了,為什么要將抓取到的圖片url存到list里面了。給list一個循環,每個url調用一次urllib.request.urlretrieve()方法,那就相當于每個url都保存為1個圖片。

3.報錯:urllib2.HTTPError: HTTP Error 403: Forbidden

原因:一些網站是禁止爬蟲做的處理

解決方法:可以在請求加上頭信息,偽裝成瀏覽器訪問User-Agent(具體的信息可以通過火狐的FireBug插件查詢),再去請求。

運行結果:一堆圖片

其他問題

1.沒有自動安裝或導入第三方庫,如urllib.request

報錯:ImportError: No module named request

解決方法:安裝第三方庫,Mac機上在安裝python3之后,系統是自動安裝了pip3,所以我們只需要每次使用pip3即可安裝(Windows請自行百度,注意區分Python2和Python3)

敲入安裝命令:pip3 install requests

2.千萬千萬要注意windows和mac系統的路徑表達方式不一樣

因為我是兩個操作系統切換著用,所以很頭痛有這個問題,每次要記得改就是了,沒技術難度。或者再加一層系統判斷進行兼容就好了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/194294.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息