python之高清图片爬取了解一下
高清图片爬取了解一下
前段时间在知乎看到一篇文章,关于视觉中国如何从腾讯身上扒一层皮的事情。大意就是互联网巨头在没有经过授权的情况下使用了9张来自视觉中国的照片,最后的结果是以赔偿视觉中国4w结束。原文链接:
https://zhuanlan.zhihu.com/p/35045810 感兴趣的可以看看。
当然这对于我们普通人而言几乎没有什么影响。但我们要知道图片版权这回事。
今天带大家爬取的图片网站是:https://unsplash.com/
这里的图片没有版权,你可以随便使用。而且这里面的图片质量都特别高。我的一些图片都是从这上面找的
Ajax加载图片
第一步,请求网页
我们打开网站,下拉页面发现不断加载图片,但是整个页面没有刷新,也就是页面的链接没有变化。其实这个过程就是Aiax加载的过程。
Ajax请求有特殊的类型,它叫做 xhr ,我们打开开发者工具或者按 F12键,切换到Network。
下方切换到 XHR 这里面都是经过Ajax加载的。我们往下多点几个链接发现,下方的三个参数只有 page 在变化,于是我们可以构造这个参数。来提交请求。
```
def get_page(page,headers):
url = 'https://unsplash.com/napi/photos'
data = {
'page': page,
'per_page': 12,
'order_by': 'latest'
}
response = requests.get(url, headers=headers, params=data)
if response.status_code == 200:
return response.json()
```
第二步:解析网页并得到图片链接
接着切换到Prereview选项卡,看到返回的是json数据。继续找发现图片链接在 download 里面,我们复制一个链接在浏览器里打开发现分析的没错。
接下来,再实现一个解析方法:提取每条数据的links字段里的download,将图片的链接返回。
```
def get_image(json,headers):
for item in json:
images = item['links']['download']#这句借鉴大佬代码,真的是厉害了
print('正在下载:',images)
urllib3.disable_warnings()
response = requests.get(images,headers=headers,verify=False)
return response,images
```
最后保存到本地
def save_images(response,images):
if '图片' not in os.listdir('.'):
os.mkdir('图片')# 创建文件夹
os.chdir('图片')# 进入文件夹下
filename = images.split('/')[-2] + '.jpg'
with open(filename, 'wb') as f:
f.write(response.content)
os.chdir('..')# 返回上级目录
if __name__ == '__main__':
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'
'(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'referer': 'https://unsplash.com/'
}
for i in range(1,10):
json = get_page(i,headers)
response,images = get_image(json,headers)
save_images(response,images)
总结
承认自己还有许多不足,代码还有许多可以改进的地方
本文还可以扩展,比如说实现指定关键字work,beauty,nature 等下载图片
代码不是一下子就写出来的,要经过不断调试,出错是很正常的,不断地发现错误并解决才能有所进步。学习的过程中善用搜索引擎,多思考。希望与你一同学习。
原创不易,觉得不错点个赞再走呗。
公众号:sixkery
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
新手如何在项目中使用区块链?
我是一个区块链Blockchain新手,我想在我们新的金融项目中使用区块链,其中预测功能将在不同系统之间共享。 互联网上有很多说法,但是我们可以从哪里开始实施? 这取决于你的Blockchain区块链想要达到的目标。此外,还取决于你想要一个公有链还是私有链。 如果你想启动一个私有链,即控制区块链,数据不开放,我建议你开始从Hyperledger Fabric超级账本开始。 另一方面,如果你想启动一个公有链,也就是说每个人都会进入区块链当它开放以后,那我建议你从ethereum以太坊开始。 如果你提供更多关于你的具体想法,可能会容易得到帮助。这个问题有些太宽泛了。 原文:http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/6/ 推荐一些可以高效学习的教程: python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。 web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。 php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件...
- 下一篇
如何使用truffle来测试以太坊的事件日志Event logs?
如何使用truffle来测试以太坊的事件日志Event logs? 例如我有一个智能合约函数,它在每次调用中触发事件。 我想在每次通过的测试中发送一个事件,下面是我的一些测试: it("should emit Error event when sending 5 ether", function(done){ var insurance = CarInsurance.deployed(); insurance.send({from: accounts[0], value: web3.toWei(5, 'ether')}).then(done).catch(done); }); it("should emit Error event when sending 5 ether", function(done){ var insurance = CarInsurance.deployed(); insurance.send({from: accounts[0], value: web3.toWei(5, 'ether')}).then(function(txHash){ assert.not...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6