用requests第三方库批量下载百度图片,要求可以多页下载,并放入到相应文件夹。使用pillow第三方库,将获取到的图片批量添加水印文字
时间: 2024-06-08 14:07:28 浏览: 118
好的,下面是代码实现。需要注意的是,百度图片的反爬措施较为严格,需要使用代理IP或者模拟浏览器进行访问。此处为了方便起见,直接使用了模拟浏览器的方式进行访问。
```python
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import quote
from PIL import Image, ImageDraw, ImageFont
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 设置水印文字
text = 'watermark'
# 设置水印字体
font = ImageFont.truetype('arial.ttf', 36)
# 设置水印文字颜色
fillcolor = (255, 255, 255)
# 设置水印透明度
opacity = 0.5
# 设置水印位置
position = (10, 10)
# 创建水印图层
layer = Image.new('RGBA', (200, 50), (0, 0, 0, 0))
draw = ImageDraw.Draw(layer)
draw.text(position, text, font=font, fill=fillcolor)
# 循环下载图片
keyword = '猫'
page_num = 2
for page in range(1, page_num + 1):
url = f'https://image.baidu.com/search/index?tn=baiduimage&word={quote(keyword)}&pn={str((page - 1) * 30)}'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
img_list = soup.find_all('img', {'class': 'main_img'})
for idx, img in enumerate(img_list):
img_url = img.get('src')
try:
pic = requests.get(img_url, timeout=10)
if not os.path.exists(keyword):
os.makedirs(keyword)
with open(f'{keyword}/{page}_{idx}.jpg', 'wb') as f:
f.write(pic.content)
# 加水印
img_path = f'{keyword}/{page}_{idx}.jpg'
img = Image.open(img_path).convert('RGBA')
img = Image.alpha_composite(img, layer)
img = img.convert('RGB')
img.save(img_path)
print(f'第{page}页第{idx}张图片下载完成!')
except Exception as e:
print(f'第{page}页第{idx}张图片下载失败: {e}')
```
代码中采用了循环下载多页图片的方式,并将每页图片放入到对应的文件夹中。同时,使用Pillow库将获取到的图片批量添加了水印文字。需要注意的是,这里的水印透明度是可以根据实际需求进行调节的。
阅读全文