使用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片爬蟲(chóng)
引言:
在本文中,我們將學(xué)習(xí)如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單的圖片爬蟲(chóng)。
我們將利用requests庫(kù)來(lái)發(fā)送HTTP請(qǐng)求,BeautifulSoup庫(kù)來(lái)解析HTML頁(yè)面,以及os和shutil庫(kù)來(lái)下載和保存圖片。通過(guò)這個(gè)教程,你將學(xué)會(huì)如何爬取網(wǎng)頁(yè)上的圖片并保存到本地。
一、準(zhǔn)備工作
在開(kāi)始之前,請(qǐng)確保你已經(jīng)安裝了Python,并且安裝了以下庫(kù):
- requests:用于發(fā)送HTTP請(qǐng)求
- beautifulsoup4:用于解析HTML頁(yè)面
你可以使用以下命令來(lái)安裝這些庫(kù):
pip install requests beautifulsoup4
二、代碼實(shí)現(xiàn)
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from urllib.request import urlretrieve
def download_images(url, save_dir):
"""
下載指定網(wǎng)頁(yè)上的所有圖片并保存到本地文件夾
:param url: 目標(biāo)網(wǎng)頁(yè)的URL
:param save_dir: 圖片保存的目錄
"""
# 創(chuàng)建保存圖片的目錄
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 發(fā)送HTTP請(qǐng)求
response = requests.get(url)
response.raise_for_status() # 如果請(qǐng)求失敗,拋出異常
# 使用BeautifulSoup解析頁(yè)面
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有的圖片鏈接
image_links = soup.find_all('img')
# 下載并保存圖片
for img in image_links:
img_url = img.get('src')
# 如果圖片鏈接是相對(duì)路徑,則將其轉(zhuǎn)換為絕對(duì)路徑
if not img_url.startswith(('http://', 'https://')):
img_url = urljoin(url, img_url)
# 下載圖片
img_name = os.path.join(save_dir, img_url.split('/')[-1])
urlretrieve(img_url, img_name)
print(f"Downloaded: {img_name}")
# 使用示例
url = "https://example.com" # 替換為你要爬取的網(wǎng)頁(yè)的URL
save_dir = "images" # 圖片保存的目錄
download_images(url, save_dir)三、代碼解析
- 導(dǎo)入庫(kù):首先,我們導(dǎo)入了所需的庫(kù),包括os、requests、BeautifulSoup、urllib.parse和urllib.request。
- 定義函數(shù):我們定義了一個(gè)名為download_images的函數(shù),它接受兩個(gè)參數(shù):url(目標(biāo)網(wǎng)頁(yè)的URL)和save_dir(圖片保存的目錄)。
- 創(chuàng)建保存目錄:如果指定的保存目錄不存在,我們將創(chuàng)建它。
- 發(fā)送HTTP請(qǐng)求:使用requests.get方法發(fā)送HTTP請(qǐng)求,并使用response.raise_for_status檢查請(qǐng)求是否成功。
- 解析頁(yè)面:使用BeautifulSoup解析HTML頁(yè)面,并查找所有的<img>標(biāo)簽,以獲取圖片鏈接。
- 下載并保存圖片:遍歷每個(gè)圖片鏈接,將其轉(zhuǎn)換為絕對(duì)路徑(如果需要),并使用urlretrieve方法下載圖片然后,將圖片保存到指定的目錄,并打印出下載的文件名。
- 使用示例:最后,我們提供了一個(gè)使用示例,包括目標(biāo)網(wǎng)頁(yè)的URL和圖片保存的目錄。
四、注意事項(xiàng)
- 在使用爬蟲(chóng)時(shí),請(qǐng)確保遵守目標(biāo)網(wǎng)站的robots.txt文件和使用條款,并尊重他人的版權(quán)和隱私。
- 不要對(duì)網(wǎng)站造成過(guò)大的壓力或進(jìn)行惡意爬取。
- 可以根據(jù)需要進(jìn)一步擴(kuò)展此代碼,例如增加錯(cuò)誤處理、添加代理支持、限制并發(fā)請(qǐng)求數(shù)、使用異步IO等。
通過(guò)本文的學(xué)習(xí),你已經(jīng)掌握了如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單的圖片爬蟲(chóng)。你可以根據(jù)自己的需求進(jìn)一步擴(kuò)展和優(yōu)化這個(gè)爬蟲(chóng)。記得在使用爬蟲(chóng)時(shí)要遵守相關(guān)規(guī)定和法律法規(guī),尊重他人的權(quán)益。
以上就是使用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片爬蟲(chóng)的詳細(xì)內(nèi)容,更多關(guān)于python圖片爬蟲(chóng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python利用arcpy模塊實(shí)現(xiàn)柵格的創(chuàng)建與拼接
這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言arcpy模塊,實(shí)現(xiàn)柵格影像圖層建立與多幅遙感影像數(shù)據(jù)批量拼接(Mosaic)的操作,感興趣的可以了解一下2023-02-02
tensorflow實(shí)現(xiàn)加載mnist數(shù)據(jù)集
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)加載mnist數(shù)據(jù)集,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
詳解python?sklearn中的數(shù)據(jù)預(yù)處理方法
本篇文章主要講解Python的sklearn庫(kù)中常用的數(shù)據(jù)預(yù)處理方法,主要介紹工具中的內(nèi)容,即該庫(kù)中的相關(guān)方法包含的常用接口和基本使用,希望對(duì)大家有所幫助2023-08-08
Python Datetime模塊和Calendar模塊用法實(shí)例分析
這篇文章主要介紹了Python Datetime模塊和Calendar模塊用法,結(jié)合實(shí)例形式分析了Python日期時(shí)間及日歷相關(guān)的Datetime模塊和Calendar模塊原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-04-04
python合并多個(gè)excel的詳細(xì)過(guò)程
合并需求很多,常見(jiàn)的有相同數(shù)據(jù)結(jié)構(gòu),按行進(jìn)行縱向拼接,下面這篇文章主要給大家介紹了關(guān)于python合并多個(gè)excel的相關(guān)資料,需要的朋友可以參考下2022-10-10
python正則表達(dá)式re.search()的基本使用教程
正則表達(dá)式是我們?nèi)粘i_(kāi)發(fā)中必然會(huì)遇到的,下面這篇文章主要介紹了python正則表達(dá)式re.search()的基本使用教程,需要的朋友可以參考下2021-05-05
分享一下Python數(shù)據(jù)分析常用的8款工具
Python是數(shù)據(jù)處理常用工具,可以處理數(shù)量級(jí)從幾K至幾T不等的數(shù)據(jù),具有較高的開(kāi)發(fā)效率和可維護(hù)性,還具有較強(qiáng)的通用性和跨平臺(tái)性,這里就為大家分享幾個(gè)不錯(cuò)的數(shù)據(jù)分析工具,需要的朋友可以參考下2018-04-04
Python 自制簡(jiǎn)單版《我的世界》的詳細(xì)過(guò)程
這篇文章主要介紹了教你用 Python 自制簡(jiǎn)單版《我的世界》,接下來(lái),我們就帶你運(yùn)行這個(gè)項(xiàng)目,并對(duì)這個(gè)開(kāi)源的小游戲做一下簡(jiǎn)單的更改,讓它變成“你的”世界2021-11-11

