使用python爬取4K壁紙保存到本地文件夾的全過程
圖片信息豐富多彩,許多網(wǎng)站上都有大量精美的圖片資源。有時候我們可能需要批量下載這些圖片,而手動一個個下載顯然效率太低。因此,編寫一個簡單的網(wǎng)站圖片爬取程序可以幫助我們高效地獲取所需的圖片資源。
目標(biāo)網(wǎng)站:
如果出現(xiàn)模塊報錯
進入控制臺輸入:建議使用國內(nèi)鏡像源
pip install 模塊名稱 -i https://mirrors.aliyun.com/pypi/simple
我大致羅列了以下幾種國內(nèi)鏡像源:
清華大學(xué) https://pypi.tuna.tsinghua.edu.cn/simple 阿里云 https://mirrors.aliyun.com/pypi/simple/ 豆瓣 https://pypi.douban.com/simple/ 百度云 https://mirror.baidu.com/pypi/simple/ 中科大 https://pypi.mirrors.ustc.edu.cn/simple/ 華為云 https://mirrors.huaweicloud.com/repository/pypi/simple/ 騰訊云 https://mirrors.cloud.tencent.com/pypi/simple/
效果圖:
代碼詳解:
get_imgurl_list(url, imgurl_list)
函數(shù)用來獲取指定頁面中的圖片鏈接,并將這些鏈接存儲在 imgurl_list
列表中。
- 使用
requests.get(url=url, headers=headers)
發(fā)起請求獲取頁面內(nèi)容。 - 使用
etree.HTML(html_str)
將頁面內(nèi)容轉(zhuǎn)換為 etree 對象,方便后續(xù)使用 XPath 進行解析。 - 通過 XPath 定位到圖片鏈接,并添加到
imgurl_list
中。
get_down_img(imgurl_list)
函數(shù)用來下載圖片到本地存儲。
- 創(chuàng)建名為 "美女" 的文件夾用于存儲下載的圖片。
- 遍歷
imgurl_list
中的圖片鏈接,逐個下載圖片并保存到本地文件夾中。
在 if __name__ == '__main__':
部分:
- 設(shè)置需要爬取的頁數(shù)
page_number = 10
。 - 循環(huán)構(gòu)建每一頁的鏈接,如
https://www.moyublog.com/95-2-2-{i}.html
。 - 調(diào)用
get_imgurl_list()
函數(shù)獲取圖片鏈接。 - 調(diào)用
get_down_img()
函數(shù)下載圖片到本地。
代碼流程:
導(dǎo)入必要的庫和模塊:
import requests # 用于發(fā)送HTTP請求 from lxml import etree # 用于解析HTML頁面 import time # 用于控制爬取速度 import os # 用于文件操作
定義函數(shù)get_imgurl_list(url, imgurl_list)
用于獲取圖片鏈接:
def get_imgurl_list(url, imgurl_list): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' } response = requests.get(url=url, headers=headers) html_str = response.text html_data = etree.HTML(html_str) li_list = html_data.xpath("http://ul[@class='clearfix']/li") for li in li_list: imgurl = li.xpath(".//a/img/@data-original")[0] imgurl_list.append(imgurl)
- 發(fā)送GET請求獲取網(wǎng)頁內(nèi)容。
- 將網(wǎng)頁內(nèi)容轉(zhuǎn)換為etree對象以便后續(xù)使用xpath進行解析。
- 使用xpath定位所有的li標(biāo)簽,并遍歷每個li標(biāo)簽獲取圖片鏈接,將鏈接添加到
imgurl_list
列表中。 - 定義函數(shù)
get_down_img(imgurl_list)
用于下載圖片:
def get_down_img(imgurl_list): os.mkdir("美女") n = 0 for img_url in imgurl_list: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' } img_data = requests.get(url=img_url, headers=headers).content img_path = './美女/' + str(n) + '.jpg' with open(img_path, 'wb') as f: f.write(img_data) n += 1
- 創(chuàng)建名為"美女"的目錄用于存放下載的圖片。
- 遍歷圖片鏈接列表,逐個發(fā)送GET請求下載圖片數(shù)據(jù),并將圖片寫入本地文件。每張圖片以數(shù)字編號命名。
主程序部分:
if __name__ == '__main__': page_number = 10 # 爬取頁數(shù) imgurl_list = [] # 存放圖片鏈接 for i in range(0, page_number + 1): url = f'https://www.moyublog.com/95-2-2-{i}.html' print(url) get_imgurl_list(url, imgurl_list) get_down_img(imgurl_list)
- 設(shè)定要爬取的頁數(shù)
page_number
為10。 - 初始化存放圖片鏈接的列表
imgurl_list
。 - 循環(huán)構(gòu)建每一頁的鏈接并調(diào)用
get_imgurl_list()
函數(shù)獲取圖片鏈接。 - 最后調(diào)用
get_down_img()
函數(shù)下載圖片到本地"美女"文件夾。
為什么我們在獲取數(shù)據(jù)的過程中需要用到IP池
應(yīng)對反爬蟲策略:許多網(wǎng)站會采取反爬蟲措施,限制單個IP的訪問頻率或次數(shù)。通過使用數(shù)據(jù)獲取服務(wù),可以輪換多IP來模仿多個用戶訪問,降低被封禁的風(fēng)險。
保證穩(wěn)定性:有些數(shù)據(jù)獲取服務(wù)可能存在不穩(wěn)定的情況,包括IP連接速度慢、IP被找到等問題。通過建立數(shù)據(jù)獲取服務(wù),可以預(yù)先準(zhǔn)備多個可用的IP地址,確保程序在某個IP不可用時可以快速切換到其他可用IP,提高爬蟲程序的穩(wěn)定性。
提高訪問速度:IP池中的多個IP地址可以并發(fā)使用,實現(xiàn)多線程或異步請求,從而加快數(shù)據(jù)獲取速度。通過在數(shù)據(jù)獲取服務(wù)中保持一定數(shù)量的可用IP地址,可以實現(xiàn)更快速的數(shù)據(jù)抓取。
應(yīng)對封禁風(fēng)險:有些網(wǎng)站會根據(jù)某些特定的IP地址或IP段進行封禁,如果整個IP池中的IP都被封禁,可以及時更新IP池中的IP地址,避免影響爬蟲程序的正常運行。
降低被識別的風(fēng)險:當(dāng)爬蟲程序使用固定的IP地址進行訪問時,容易被網(wǎng)站識別出是爬蟲行為。
完整代碼:
import requests # python基礎(chǔ)爬蟲庫 from lxml import etree # 可以將網(wǎng)頁轉(zhuǎn)換為Elements對象 import time # 防止爬取過快可以睡眠一秒 import os def get_imgurl_list(url, imgurl_list): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'} # 發(fā)送請求 response = requests.get(url=url, headers=headers) # 獲取網(wǎng)頁源碼 html_str = response.text # 將html字符串轉(zhuǎn)換為etree對象方便后面使用xpath進行解析 html_data = etree.HTML(html_str) # 利用xpath取到所有的li標(biāo)簽 li_list = html_data.xpath("http://ul[@class='clearfix']/li") # 打印一下li標(biāo)簽個數(shù)看是否和一頁的電影個數(shù)對得上 print(len(li_list)) # 輸出20,沒有問題 for li in li_list: imgurl = li.xpath(".//a/img/@data-original")[0] print(imgurl) # 寫入列表 imgurl_list.append(imgurl) def get_down_img(imgurl_list): os.mkdir("美女") n = 0 for img_url in imgurl_list: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'} img_data = requests.get(url=img_url, headers=headers).content # # 拼接圖片存放地址和名字 img_path = './美女/' + str(n) + '.jpg' # 將圖片寫入指定位置 with open(img_path, 'wb') as f: f.write(img_data) # 圖片編號遞增 n = n + 1 if __name__ == '__main__': page_number = 10 # 爬取頁數(shù) imgurl_list = [] # 存放圖片鏈接 # 1. 循環(huán)構(gòu)建每頁的鏈接 for i in range(0, page_number + 1): # 頁數(shù)拼接 url = f'https://www.moyublog.com/95-2-2-{i}.html' print(url) # 2. 獲取圖片鏈接 get_imgurl_list(url, imgurl_list) # 3. 下載圖片 get_down_img(imgurl_list)
以上就是使用python爬取4K壁紙保存到本地文件夾的全過程的詳細(xì)內(nèi)容,更多關(guān)于python爬取壁紙保存到本地的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
matplotlib.pyplot畫圖并導(dǎo)出保存的實例
今天小編就為大家分享一篇matplotlib.pyplot畫圖并導(dǎo)出保存的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python利用keyboard模塊實現(xiàn)鍵盤記錄操作
模擬鍵盤操作執(zhí)行自動化任務(wù),我們常用的有pyautowin等自動化操作模塊。今天介紹的這個模塊叫做keyboard,它是純Python原生開發(fā),編譯時完全不需要依賴C語言模塊。一行命令就能完成安裝,非常方便,需要的可以了解一下2022-10-10Python的Django框架中消息通知的計數(shù)器實現(xiàn)教程
通知的計數(shù)器非常有用,新通知時+1和讀過通知后的-1是最基本的功能,這里我們就來看一下Python的Django框架中消息通知的計數(shù)器實現(xiàn)教程2016-06-06