用Python语言编写爬取百度图片中猫和狗的图片各100张,将图片存入相应文件夹,两个文件夹分别为cat和dog的代码
时间: 2024-06-10 21:04:45 浏览: 84
下面是Python代码示例,实现爬取百度图片中猫和狗的图片各100张,并将图片存入相应的文件夹cat和dog:
```python
import requests
import os
def download_images(keyword, count, save_dir):
url = 'https://image.baidu.com/search/acjson'
params = {
'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': keyword,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': 0,
'word': keyword,
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': 0,
'istype': 2,
'qc': '',
'nc': 1,
'fr': '',
'pn': 0,
'rn': count,
'gsm': '1e',
'1520290518283': ''
}
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.36 Edge/16.16299'
}
if not os.path.exists(save_dir):
os.makedirs(save_dir)
res = requests.get(url, params=params, headers=headers)
data = res.json().get('data')
for i in range(count):
try:
img_url = data[i].get('thumbURL')
res = requests.get(img_url, headers=headers, timeout=10)
with open(f'{save_dir}/{keyword}_{i}.jpg', 'wb') as f:
f.write(res.content)
print(f'Success: {keyword}_{i}.jpg')
except:
print(f'Error: {keyword}_{i}.jpg')
continue
if __name__ == '__main__':
keyword_list = ['猫', '狗']
count = 100
for keyword in keyword_list:
download_images(keyword, count, f'{keyword}')
```
解释一下代码:
1. 首先定义了`download_images`函数,用于下载指定关键字的图片,其中`keyword`表示关键字,`count`表示需要下载的图片数量,`save_dir`表示存储图片的目录。
2. 定义请求的url和参数,其中`keyword`、`rn`参数分别表示关键字和每次请求的图片数量。
3. 定义请求的headers,这里使用了一个假的User-Agent,因为百度图片搜索接口有反爬虫机制,在请求时需要模拟浏览器的User-Agent。
4. 判断存储图片的目录是否存在,如果不存在则创建。
5. 发送HTTP GET请求并解析响应的json数据,获取到图片URL和对应的保存路径后,发送HTTP GET请求下载图片,并将图片保存到本地。
6. 在主函数中,定义一个关键字列表和需要下载的图片数量,遍历关键字列表,分别下载猫和狗的图片。
注意事项:
1. 在请求百度图片搜索接口时,需要使用一个假的User-Agent,否则可能会受到反爬虫机制的限制。
2. 在下载图片时,需要注意异常处理,因为不是所有的图片URL都是可用的,可能会出现下载超时、网络异常等情况。
3. 在保存图片时,建议使用`with open()`语句,以确保文件对象能够正常关闭,避免文件句柄泄漏和资源浪费。
4. 如果需要增加下载图片的数量,可以调整`count`参数,但需要注意请求的次数不要超过接口的限制。
阅读全文