百度鲜花图像爬取

深度学习依赖大量的数据,除了使用公开的数据集之外就是利用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=&copyright=&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)

 

posted @ 2022-04-18 09:48  老牛小茂  阅读(89)  评论(0编辑  收藏  举报