返回
Python爬虫宝典:下载某度图片不再是难事
后端
2023-02-09 19:58:48
使用 Python 爬虫从百度批量下载图片
作为一名经验丰富的 Python 爬虫开发者,我迫不及待地想与大家分享使用 Python 爬虫根据从百度批量下载图片的技巧。无论你是初学者还是经验丰富的程序员,本教程将引导你一步步完成整个过程。准备好你的工具包,让我们开始吧!
必备工具
首先,让我们确保你拥有必要的工具:
- Python 3 环境
- requests 库
- bs4 库
- Pillow 库
- 可选:代理 IP(用于应对反爬虫措施)
代码实现
现在,让我们潜入 Python 代码的海洋:
import requests
from bs4 import BeautifulSoup
from PIL import Image
import os
# 设置要爬取的关键字
keyword = "风景"
# 设置要保存图片的路径
save_path = "D:/Pictures/baidu_images/"
# 创建一个代理 IP 池(可选)
proxy_pool = [
{"http": "http://127.0.0.1:8080"},
{"http": "http://127.0.0.1:8081"},
{"http": "http://127.0.0.1:8082"}
]
# 循环爬取图片
for i in range(1, 101):
# 构建请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
}
# 随机选择一个代理 IP
proxy = random.choice(proxy_pool)
# 发送请求
response = requests.get(
"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result&queryWord=%s&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1654147262220=".format(
keyword, i), headers=headers, proxies=proxy)
# 解析响应内容
data = response.json()
# 提取图片链接
image_urls = [item["objURL"] for item in data["data"]]
# 下载图片
for image_url in image_urls:
try:
# 发送图片请求
image_response = requests.get(image_url, headers=headers, proxies=proxy)
# 保存图片
image = Image.open(BytesIO(image_response.content))
image.save(os.path.join(save_path, "{}.jpg".format(image_urls.index(image_url))))
except Exception as e:
print(e)
continue
深入解析
在这个代码中:
- 我们设置了要爬取的关键字和要保存图片的路径。
- 我们使用了一个代理 IP 池来应对反爬虫措施。
- 循环遍历页面,提取图像 URL 并将其保存在列表中。
- 我们使用 Pillow 库逐个下载图像,将其保存到指定路径。
代理 IP 的作用
代理 IP 可用于掩盖你的真实 IP 地址,从而避免被网站封禁。在我们的代码中,我们随机从代理 IP 池中选择了一个代理 IP,并在请求中使用它。
结论
恭喜你!现在你已经掌握了使用 Python 爬虫从百度批量下载图片的技术。此技能对于收集数据、图像处理或创建个人图像库很有用。
常见问题解答
- 如何更改要爬取的关键字? 更改
keyword
变量的值即可。 - 如何设置不同的保存路径? 将
save_path
变量更新为所需的路径。 - 如何应对反爬虫措施? 在
proxy_pool
变量中添加额外的代理 IP。 - 如何优化代码性能? 尝试多线程或多进程方法来并行下载图片。
- 有哪些其他可用于图像爬取的库? 除了 Pillow,你还可以使用 OpenCV 或 Scrapy。