python3爬取动态网页图片

爬取的URL地址:https://unsplash.com/

这是一个优美图片地址,往下拉就可以出来更多的图片,这显然是一个动态网页呀…

分析

关于详细分析以及我的参考可见:http://blog.csdn.net/c406495762/article/details/78123502

因为分析方向一致,我就不在此说了,我跟这位博主的工具有一些出入,实际上用Chrome分析已经足够了。

##代码

这是我后来自己写的代码,比上面博主的简短一些,亦可参考参考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
'''
函数目标:
爬取动态网页的图片
'''
import requests
import json
from urllib.request import urlretrieve
import os
import time
if __name__ == '__main__':
url = 'https://unsplash.com/napi/feeds/home'
'''
添加需要的代理:
authorization证书配置,有时网站需要此类的代理html信息才会出来...
json格式分析js页面的利器,有时用js渲染出来的页面,要注意观察其URL及相对准确的信息
'''
header = {'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
'authorization':'Client-ID c94869b36aa272dd62dfaeefed769d4115fb3189a9xxxxxxxxxxx'}
re = requests.get(url=url, headers=header)
re.encoding = 'utf-8'
# 通过分析易知一页有包括多张图片的ID链接,可用python的json格式处理解析
json_info = json.loads(re.text)
# 建立一个空的列表用于装ID信息
list_id = []
if '优美图片集' not in os.listdir():
os.makedirs('优美图片集')
for each in json_info['photos']:
list_id.append(each['id'])
# 利用urlretrieve函数一一下载,设置延迟
for i in range(0, len(list_id)):
print('开始下载指定页面中的第%d张' % (i + 1))
urlretrieve(url='https://unsplash.com/photos/' + list_id[i] + '/download?force=true.jpg', filename='优美图片集/' + '系列%d.jpg' % i)
print('下载完成!请查收...')

虽然说我的代码简短一点,不过我还是支持面对对象模式编程的,方便以后的学习,也是对自己的一种考验。

运行之后在本工程目录可见:

最后再补充说明一下:

每一次的拉取新的图片时,进行抓包,得知新的图片ID以及一个页面,通过分析此页面便可得到图片相关的信息,进而进行下载保存了(如下图)。


简单说说当时的情况,在参考了上面博主的分析过程后,利用了Chrome下载器的下载发现了图片的信息,然后我用urlretrieve函数单张下载的测试,发现成功了…附上代码。

1
2
3
4
5
from urllib.request import urlretrieve
if __name__ == '__main__':
urlretrieve('https://unsplash.com/photos/NrflUuJJK0I/download?force=true.jpg', 'tu.jpg')
print('下载完成!')

不过从来都没有见过这种src信息…算是开了眼界,长了知识啦。

---------------本文终---------------

文章作者:刘俊

最后更新:2019年01月02日 - 14:01

许可协议: 转载请保留原文链接及作者。