深度学习依赖大量的数据,除了使用公开的数据集之外就是利用Python的爬虫技术自己收集和整理,爬虫的本质是利用代码模拟浏览器向网页发起请求,得到网站的相应进行分析从中获取想要爬取的数据,本例子利用代码在百度图片上搜索鲜花,将搜索到的图片保存到本地。
首先对百度图片搜索鲜花页面进行分析,图片是不断动态加载的,它是一个ajax请求,右键点击检查项打开网页分析窗口,查看新加载数据的URL及参数,参数中有queryWord和Word的值为搜索框输入的鲜花关键字,参数pn为从第几张开始加载,rn为加载多少张图片,将响应内容利用json解析工具进行解析,每张图片的的地址在thumbURL中。
根据上面的分析设计设计函数get_param(keyword,paginator)根据输入的关键字和页数,生成请求参数;定义函数get_urls(url,params) 拼接形成每一页的完整请求链接;定义函数get_image_url(urls,headers)获取页面响应,并转换成json格式,json数据的data字段中提取thumbURL字段值即每张图片的地址;定义函数get_image(keyword,image_url)请求图片地址,将图片数据下载到本地文件夹。
# 根据输入的关键字和页数,生成请求参数
def get_param(keyword,paginator):
keyword=urllib.parse.quote(keyword) #对中文关键词转换编码
params=[]
for i in range(1,paginator+1):
# 因为页面图片是动图加载的
params.append(‘tn=resultjson_com&logid=10338332981203604364&ipn=rj&ct=201326592&is=&fp=result&fr=&word={}&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={}&rn=30&gsm=78&1650241802208=’.format(keyword,keyword,30*i))
return params
# 定义函数拼接形成每一页的完整请求链接
def get_urls(url,params):
urls=[]
for param in params:
urls.append(url+param)
return urls
# 获取页面,将相应转换成json格式,从data字段提取每一张图片的地址
def get_image_url(urls,headers):
image_url=[]
for url in urls:
page_json=requests.get(url,headers=headers).json()
page_data=page_json.get(‘data’)
for data in page_data:
if data:
image_url.append(data.get(‘thumbURL’))
return image_url
# 获取图片地址将图片保存到本地文件夹中
def get_image(keyword,image_url):
file_name=os.path.join(‘.’,keyword)
print(file_name)
if not os.path.exists(file_name):
os.mkdir(file_name)
for index,url in enumerate(image_url,start=1):
with open(file_name+’/{}.jpg’.format(index),’wb’)as f:
f.write(requests.get(url,headers=headers).content)
if index !=0 and index % 30==0:
print(‘第{}页下载完成’.format(index/30))
if __name__==’__main__’:
url=’http://image.baidu.com/search/acjson?’
headers={‘User-Agent’:’Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36′}
# 只需要修改下面的关键字和页数,就爬取不同的百度图像
keyword=’鲜花’ #定义关键字
paginator=2 #定义要爬取的页数
params=get_param(keyword,paginator)
urls=get_urls(url,params)
image_urls=get_image_url(urls,headers)
get_image(keyword,image_urls)
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/245583.html