
本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
CodeBuddy在项目开发中的强大能力,同时也能学习Python爬虫的核心技术和最佳实践。无论你是AI编程新手还是有经验的开发者,都能从中获得实用的技能提升。本篇教程将带领大家通过CodeBuddy实现一个简单的图片下载器,帮助你快速入门Python爬虫的世界。
在日常工作和学习中,我们经常需要批量下载网页上的图片资源。手动下载不仅效率低下,而且容易出错。通过AI编程助手CodeBuddy,我们可以快速实现自动化下载功能,大幅提高工作效率。
本案例我们将以壁纸网站为例,演示如何使用Python脚本自动下载高清图片。
使用AI编程助手的关键在于提供清晰、精确的提示词。我们向CodeBuddy提供了如下提示:
将该http://www.netbian.com/mei/ 网址中的图片使用py脚本下载到本地,具体要求如下:
1. 通过我提供的xpath获取图片的地址以及图片名称
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')
CodeBuddy根据我们的提示词生成了完整的Python爬虫代码。我们将代码复制到PyCharm中运行,查看效果:


可以看到,脚本运行非常顺利,一次性将目标网站的高清图片全部下载到本地指定文件夹中。
下面是CodeBuddy生成的完整代码,我们来逐段分析其核心功能:
import os
import requests
from lxml import html
from urllib.parse import urljoin
import time
import random
def download_images_with_xpath(url, save_folder='downloaded_images', max_images=20):
"""
使用XPath从指定网址下载图片到本地
参数:
url: 要抓取的网页URL
save_folder: 图片保存目录
max_images: 最多下载图片数量
"""
# 创建保存目录
if not os.path.exists(save_folder):
os.makedirs(save_folder)
# 设置请求头模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Referer': 'http://www.netbian.com/'
}
try:
# 获取网页内容
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
# 解析HTML
tree = html.fromstring(response.content)
# 使用提供的XPath获取图片URL和名称
img_urls = tree.xpath('//ul/li/a/img/@src')
img_names = tree.xpath('//ul/li/a/img/@alt')
# 确保获取到的数据长度一致
min_length = min(len(img_urls), len(img_names), max_images)
img_urls = img_urls[:min_length]
img_names = img_names[:min_length]
downloaded_count = 0
for img_url, img_name in zip(img_urls, img_names):
if downloaded_count >= max_images:
break
try:
# 处理相对URL
full_img_url = urljoin(url, img_url)
# 过滤非图片的URL
if not full_img_url.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.webp')):
continue
# 清理图片名称(移除非法字符)
clean_name = ''.join(c for c in img_name if c.isalnum() or c in (' ', '_', '-')).strip()
if not clean_name:
clean_name = f"image_{downloaded_count + 1}"
# 下载图片
img_data = requests.get(full_img_url, headers=headers, timeout=15).content
# 获取文件扩展名
ext = os.path.splitext(full_img_url)[1].lower()
if not ext:
ext = '.jpg' # 默认扩展名
# 生成保存路径
filename = os.path.join(save_folder, f"{clean_name}{ext}")
# 处理文件名冲突
counter = 1
while os.path.exists(filename):
filename = os.path.join(save_folder, f"{clean_name}_{counter}{ext}")
counter += 1
# 保存图片
with open(filename, 'wb') as f:
f.write(img_data)
print(f"已下载: {filename} (原名: {img_name})")
downloaded_count += 1
# 随机延迟,避免请求过于频繁
time.sleep(random.uniform(1.0, 2.5))
except requests.exceptions.RequestException as e:
print(f"下载图片失败: {img_url} - 错误: {e}")
continue
except Exception as e:
print(f"处理图片时出错: {img_name} - 错误: {e}")
continue
print(f"\n下载完成! 共下载了 {downloaded_count} 张图片到 {save_folder} 目录")
except requests.exceptions.RequestException as e:
print(f"访问网页失败: {e}")
except Exception as e:
print(f"解析网页时出错: {e}")
if __name__ == "__main__":
# 目标网址
target_url = "http://www.netbian.com/mei/"
# 下载图片
download_images_with_xpath(
target_url,
save_folder='美女图片',
max_images=30
)虽然CodeBuddy生成的代码已经非常完善,但在实际应用中,我们还可以考虑以下优化方向:
当然上述的需求,我们依旧可以通过CodeBuddy来完善,感兴趣的同学可以尝试一下哦!!
通过本次实践,我们可以看到CodeBuddy在Python爬虫开发中展现出的强大能力。只需提供简洁明确的提示词,它就能生成功能完善、异常处理周到的爬虫代码。
关键成功因素:
CodeBuddy能够准确理解需求在下一篇教程中,我们将基于本次下载的图片,实现智能图片合成功能,敬请期待!
💡 提示:在使用网络爬虫时,请务必遵守网站的robots.txt规则和相关法律法规,尊重网站所有者的权益,仅用于个人学习和非商业用途。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。