批量爬取某图片网站的图片
批量爬取某图片网站的图片
声明:仅用于爬虫学习,禁止用于商业用途谋取利益
1、网页解析
-
(1)打开veer首页,F12(谷歌浏览器),输入关键字,点击搜索,点击查看如图画圈位置
-
(2)查看search中的Headers,找到请求的URL和请求的payload,URL是请求的网址,payload是发送请求时的参数
对于各个详细的参数在代码部分会详细讲
-
(3)查看响应(请求发出后的返回的数据包),格式是字典格式也就是map,可以看到list中放的id
- (4)里边有对图片的中文描述
- (5)找到图片所在网页
- (6)找到最大尺寸的图片网址
2、代码解析
#conding=utf-8
import requests
import json
def download(img_url, img_name):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101'
}
req = requests.get(img_url, headers=headers)
path = r'F:\newimg'
file_name = path + '\\' + img_name+img_url[-13:]#图片名为描述+图片的编号
f = open(file_name, 'wb')
f.write(req.content)#以字节流的形式读入文件
f.close
def get_list(name, type):
url = 'https://www.veer.com/ajax/search' #URL
header = {
'content-type': 'application/json',
'Host': 'www.veer.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
payloadData = {
'graphicalStyle': type, #类型:1.照片 2.插画 3.矢量图 Nan为全部
'page': 1, #分页数量
'page_type': 6, #分页的格式,这个不重要
'perpage': 10000, #一页多少图片
'phrase': name #搜索的关键字
}# 分页数量为1,一页10000,是为了尽量只从一个页面上的到所有的list
html = requests.post(url, data=json.dumps(payloadData), proxies={"http" : "http:// 115.225.74.53: 8118"}, headers=header).text #payloadData要求用josn来进行解析,代理ip自己去爬取,
list = json.loads(html)#获取json解析的list,不然全是乱码
data = list['data'] #封装成字典格式
print("总共搜索到图片:",data['totalCount'], "张图片")
id = data['list']
for sid in id:
print(sid['oss400'], sid['cnTitle'])#用的是400的,为了veer的利益,不采用1600尺寸的图片
if sid['cnTitle']==None:#防止图片描述为空
sid['cnTitle'] = "none"
download(sid['oss400'], sid['cnTitle'])#进行下载
if __name__ == '__main__':
print("输入搜索图片名称:")
name = input()
print("选择图片类型1.照片 2.插画 3.矢量图 4.所有")
type = input()
if type>'3':
type=""
get_list(name, type)
3、效果展示
-
(1)程序运行界面
-
(2)文件储存界面