如何爬取百度图片的内容
如何爬取百度图片的内容?
这和缓存没有什么关系,百度图片的信息是动态加载的,在一个json文件中,需要抓包分析,解析这个文件才能提取到图片的url进行下载,下面我大概介绍一下如何抓取百度图片url信息并进行下载,实验环境win7+python3.6+pycharm,就是两个函数,很简单,先贴源码吧,如下:
import requests
import json
import time
def getImageInfo():
'''获取图片url信息'''
image_urls=[] # 存储图片url信息
url='http://image.baidu.com/search/acjson?tn=resultjson_com& ipn=rj& word=风景图片大全& pn=60& rn=30'
response=requests.get(url=url) # 请求json文件
response.encoding='utf-8' # 设置编码
data=json.loads(response.text).get('data') # 加载json文件
for item in data: # 获取图片下载url信息
if item.get('replaceUrl') and len(item.get('replaceUrl'))> 1:
image_url=item.get('replaceUrl')[1].get('ObjURL') # 得到下载url
image_urls.append(image_url) # 插入image_urls中
return image_urls
def downloadImage():
'''下载图片'''
image_urls=getImageInfo() # 获取图片url信息
for i in range(len(image_urls)):
try:
# 成功下载
content=requests.get(image_urls[i]).content # 获取图片(二进制信息)
image_file=open(r'F:\picture\baidu\%d.jpg' % (i+1),'wb') #创建jpg文件
image_file.write(content) #写入文件
image_file.close() #关闭文件
print('第%d张图片下载成功:%s' % (i+1,image_urls[i])) # 打印下载信息
time.sleep(1) # 暂停1秒,防止被识别
except Exception as e:
# 失败下载
print('第%d张图片下载失败: %s' % (i+1, image_urls[i])) # 打印下载信息
print(e) # 打印异常信息
continue
if __name__=="__main__":
'''主函数'''
downloadImage()
下面介绍一下主要步骤:
1.抓包分析页面。按F12调出开发者工具,刷新页面,依次点击"Network","XHR",和"Preview",就可看到动态加载的图片信息,我这里以爬取百度图片“风景图片大全为例”,网址为http://image.baidu.com/search/index?tn=baiduimage& ipn=r& ct=201326592& cl=2& lm=-1& st=-1& fm=result& fr=& sf=1& fmq=1522202517144_R& pv=& ic=0& nc=1& z=& se=1& showtab=0& fb=0& width=& height=& face=0& istype=2& ie=utf-8& hs=2& word=风景图片大全& f=3& oq=风景图片大全& rsp=0,如下:
json文件的信息我们可以在开发者工具中看到,以下是json中的图片信息,我们需要对这些数据进行提取:
对应的json文件url信息可以直接在"Headers"查看到,如图:
2.下面我们就可以对json文件进行解析了。这里注意的是,url中并不是所有参数都有用,这里只需提出tn=resultjson_com& ipn=rj& word=风景图片大全& pn=60& rn=30这几个参数就行,核心是提取到第二个"ObjURL"信息,这个是图片位置所在,主要代码如下:
3.图片信息提取成功后,我们就可以进行图片的下载了,这里比较简单,主要用到requests这个包,就是基本的文件写入操作,只不过是二进制的写入,主要代码如下:
程序运行结果如下,已经打印出下载信息:
对应的图片也已经下载在"F:\picture\baidu"这个目录下边:
这里有些图片由于url已失效,所以下载后不能显示。
至此,我们就完成了百度图片信息的提取以及图片的下载。整个过程来看,其实很简单,就是抓包分析,获取到json文件,然后解析,提取到自己需要的信息,最后就能进行图片的下载,只要你有一定的python基础,会基本python爬虫,很快就能完成图片信息的爬取和下载,网上也有很多这方面的资料,你可以搜一下,对你帮助一定很大,我这里不在赘述,希望以上分享的内容能对你有所帮助吧。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何爬取百度图片的内容
本文地址: https://pptw.com/jishu/328125.html