python自动化系列:轻松从网页批量下载图片



实现过程
一、导入必要的库
import osimport requestsfrom bs4 import BeautifulSoupfrom urllib.parse import urljoin, urlparse
download_images_from_urldef download_images_from_url(url, save_dir='./images'):"""从给定的URL下载所有图片到本地目录。Args:url (str): 目标网页的URL。save_dir (str): 保存图片的本地目录,默认为当前目录下的'./images'。"""
-
如果指定的保存目录不存在,则创建该目录,确保后续可以保存图片文件。
if not os.path.exists(save_dir):os.makedirs(save_dir)
-
使用 requests.get()方法获取网页内容,并通过raise_for_status()检查请求状态,确保请求成功。
response = requests.get(url)response.raise_for_status() # 检查请求是否成功
-
使用 BeautifulSoup解析HTML文本,以便后续查找和处理页面中的图片标签。
soup = BeautifulSoup(response.text, 'html.parser')
-
使用 find_all('img')查找所有的<img>标签。 -
提取每个 <img>标签的src属性值作为图片链接。如果src属性存在,则使用urljoin将其转换为绝对路径,形成完整的图片URL列表。
img_tags = soup.find_all('img')img_urls = [urljoin(url, img['src']) for img in img_tags if 'src' in img.attrs]print(img_urls)
-
遍历所有图片链接,尝试下载每个图片: -
发送GET请求并启用流模式以节省内存。 -
使用 urlparse解析URL,从中提取出文件名。 -
构建保存路径,打开文件并逐块写入数据。 -
打印成功或失败的消息,便于调试。
for img_url in img_urls:try:img_response = requests.get(img_url, stream=True)img_response.raise_for_status()parsed_url = urlparse(img_url)img_filename = os.path.basename(parsed_url.path)if not img_filename: # 如果没有文件名,则跳过continueimg_path = os.path.join(save_dir, img_filename)with open(img_path, 'wb') as img_file:for chunk in img_response.iter_content(1024):img_file.write(chunk)print(f"Downloaded {img_url} to {img_path}")except Exception as e:print(f"Failed to download {img_url}: {e}")
-
设置目标网页URL,并调用 download_images_from_url函数执行图片下载任务。
if __name__ == "__main__":url = "https://youzhiyouxing.cn/materials"download_images_from_url(url)
以上就是本次分享的全部内容,如果你有任何疑问或想要分享你的自动化办公经验,我们的评论区永远为你敞开。你的每一个点赞和转发,都是对我们最大的支持和鼓励!
想要深入学习并获取文中的完整代码吗?很简单,关注我们的公众号,并回复文章标题,即可立即获取。
再次感谢你的阅读,期待在下一次分享中与你相见!
精选阅读
python自动化系列:将Excel表格中的学生信息自动填充到一个word文档
python自动化系列:将Excel表格中的学生多条信息自动填充到一个Word文档
夜雨聆风