使用Python编写脚本自动下载网页上的图片
发布时间:2023-12-04 08:13:04
当我们在浏览网页时,经常会遇到需要下载网页上的图片的场景。为了提高效率,我们可以使用Python编写脚本自动下载网页上的图片。
首先,我们需要安装一个用于发送HTTP请求的库,比如requests库。可以使用以下命令安装:
pip install requests
安装完成后,我们就可以开始编写脚本了。下面是一个简单的例子:
import requests
import os
def download_image(url, save_dir):
response = requests.get(url)
if response.status_code == 200:
# 使用图片的URL最后一部分作为保存的文件名
file_name = url.split('/')[-1]
save_path = os.path.join(save_dir, file_name)
with open(save_path, 'wb') as f:
f.write(response.content)
print(f'Downloaded: {file_name}')
else:
print(f'Failed to download image: {url}')
if __name__ == '__main__':
# 图片的URL
image_url = 'http://example.com/image.jpg'
# 保存的目录
save_directory = './images'
# 创建保存的目录(如果不存在)
os.makedirs(save_directory, exist_ok=True)
# 调用下载函数
download_image(image_url, save_directory)
这里的download_image函数接受两个参数:图片的URL和保存的目录。函数首先发送一个GET请求获取图片的数据,然后将数据写入到文件中保存。
使用时,只需要将要下载的图片的URL和需要保存的目录传递给download_image函数即可。这个脚本会自动创建保存的目录(如果不存在),并将图片下载保存到该目录下。
下面是一个完整的例子来下载网页上的多张图片:
import requests
import os
def download_image(url, save_dir):
response = requests.get(url)
if response.status_code == 200:
# 使用图片的URL最后一部分作为保存的文件名
file_name = url.split('/')[-1]
save_path = os.path.join(save_dir, file_name)
with open(save_path, 'wb') as f:
f.write(response.content)
print(f'Downloaded: {file_name}')
else:
print(f'Failed to download image: {url}')
if __name__ == '__main__':
# 要下载的网页的URL
page_url = 'http://example.com/'
# 保存的目录
save_directory = './images'
# 创建保存的目录(如果不存在)
os.makedirs(save_directory, exist_ok=True)
# 发送GET请求获取网页内容
response = requests.get(page_url)
if response.status_code == 200:
# 使用正则表达式匹配出图片的URL
import re
pattern = r'<img[^>]*src=[\"|\'](.*?)[\"|\'][^>]*>'
image_urls = re.findall(pattern, response.text)
# 下载每张图片
for url in image_urls:
# 如果图片的URL是相对路径,则拼接完整的URL
if not url.startswith('http'):
url = page_url + url
download_image(url, save_directory)
else:
print(f'Failed to load page: {page_url}')
这个脚本首先会发送一个GET请求获取网页的内容,然后使用正则表达式匹配出网页中所有的图片URL。接着,循环遍历每个图片的URL,调用download_image函数进行下载。
可以看到,通过编写简单的Python脚本,我们可以自动下载网页上的图片,从而提高工作效率。
