本文介绍如何使用Python的urllib.parse模块解析URL,提取并去除查询参数,仅保留URL的基本部分。同时,演示了如何利用requests库下载图片,并保存到本地指定目录。文章还包含了处理多级目录和创建目录结构的代码示例。
import os,requests
from urllib.parse import urlparse
# 如果获取的链接地址如下,但是我们只想要问号前面的怎么处理
url = 'http://i2.chuimg.com/657f715d4ba2439e91e9e67f1c7026b9_1125w_1488h.jpg?imageView2/1/w/215/h/136/interlace/1/q/90'
# 以下网址为多层级目录情况
# url = 'https://s.chuimg.com/simpleicons/twitter.svg'
html = urlparse(url)
# ParseResult(scheme='http', netloc='i2.chuimg.com',
# path='/657f715d4ba2439e91e9e67f1c7026b9_1125w_1488h.jpg',
# params='', query='imageView2/1/w/215/h/136/interlace/1/q/90', fragment='')
print(html)
full_url = '%s://%s%s'%(html.scheme,html.netloc,html.path)
print(full_url) # http://i2.chuimg.com/657f715d4ba2439e91e9e67f1c7026b9_1125w_1488h.jpg
# 图片名字
file_name = html.path[1:]
print(file_name) # 657f715d4ba2439e91e9e67f1c7026b9_1125w_1488h.jpg
resp = requests.get(full_url)
# 初始化下载图片目录
image_dir = os.path.join(os.curdir,'images')
print(image_dir) # .\images
file_path = os.path.join(image_dir,file_name)
print(file_path) # .\images\657f715d4ba2439e91e9e67f1c7026b9_1125w_1488h.jpg
file_menu = os.path.dirname(file_path)
print(file_menu) #去掉文件名,返回目录 .\images
# makedirs可以创建多级目录,例如:.\images\simpleicons
# 而mkdir只能创建一级目录
if not os.path.isdir(file_menu):
os.makedirs(file_menu)
with open(file_path,'wb')as f:
# 边下边存到硬盘,默认requests是下载到内存中,最后再存到硬盘
for funk in resp.iter_content(1024):
f.write(funk)