python 网络爬虫入门(四)— 破解pexels高清原图
2017-03-23 00:14
447 查看
最近貌似对好看的图着迷,Pixabay爬不到原图不甘心呀。
百度+知乎了下,于是转向pexels,同样一个高人气图片网站。
颜值逆天,画质不输Pixabay,瞬间感觉有了动力?
不到一下午就爬到高清原图,仅用re\requests几个库,随后又做了个下载器。
之前的博文泛泛带过的多,总感觉少了点什么,这次详细记录一下。
首先点击进入官网,又见瀑布流,点击查看源码。
看到后面这一串,便可知晓网页有嵌入javascript脚本。由于前面踩过坑,立即用requests库检查了下,发现可以正常返回源码中数据,松了一口气。(爬取网站前先检查一下其反爬策略还是很有必要的,之前就曾遇到过返回乱码或者什么都没有的情况)
2、获取原图地址
搜索框中输入’water’,页面跳转到如下:
查看源代码和首页差不多,接着是图片真实地址链接。我在这里绕了几个弯,具体不叙述。
加上前面pixabay的坑,最后得到经验:直接点击官方下载按钮,从对话框中看到图片真实链接,这是最保险的模式。(因为有时“查看模式”并不能提供真实链接,而且有时也并不能下载得到。)
最后发现真实地址有两种形式,还发现图片有jpg和jpeg两种格式:
我第一次以为链接只有第二种,结果辛辛苦苦匹配正则下载的图确是这样的:
有些图并不能打开,又得到教训:爬虫爬下的图打不开时,可能链接地址是错的。
对比源码,发现’data-pin-media’和’src’中皆含地址链接数据,用正则提取,再将images换成static即为链接。图片格式有两种,为了方便后面命名,我还是分成了两段来取。用最简单的(.*?),结果又出问题了:
每个链接后面都多了个’?’,如何去掉字符串最后一位字符,我记得string类是没有像list类的pop()方法的,又考验python基础。不过这个简单啦~
3、批量下载
这特么才是关键啊!
网页使用瀑布流模式,是没有页码的,无法像之前那样一页一页遍历。selenium还不熟练,这下如何是好。又倒回去看源码。 然后发现了这一堆!
点击源码中href=”/search/water/?page=2”,页面跳转
地址栏里链接变成 https://www.pexels.com/search/water/?page=2
熟悉的感觉,这几个图好像刚刚那个页面也出现过。。。
回第一页源码中数了下,一共才发现15张缩略图的链接。
然后全明白了,回page1一数正好吻合。
原来获取图片接口在源码里啊,每一页15张,308就是最大页数了。
接着就简单了,又可以循环遍历,避开瀑布流啦^_^
试着下载图片,结果又出幺蛾子了:
目测是爬虫被网站发现了,只好将urllib2改为requests的get方式,设置user_agent和header, user_agent还设了随机数,爬完一页time.sleep(3)。
通过。
过后查了一下,有个帖子总结的很好。
最后用之前Pixabay的模版又做了个下载器。
已经存在的图自动跳过。
强迫症患者,终于等到10页图全部下载完才睡。。。
本来准备随便拿个图看效果
结果太大了上传不了。。。。
(比如上图第一排最右边的那个图就有27M)
https://github.com/LUCY78765580/Python-web-scraping/blob/master/pexels.py
这个爬虫还是可以的,就是速度太慢了了,等学了多线程再回来优化。
百度+知乎了下,于是转向pexels,同样一个高人气图片网站。
颜值逆天,画质不输Pixabay,瞬间感觉有了动力?
不到一下午就爬到高清原图,仅用re\requests几个库,随后又做了个下载器。
之前的博文泛泛带过的多,总感觉少了点什么,这次详细记录一下。
一、过程
1、分析查看首先点击进入官网,又见瀑布流,点击查看源码。
看到后面这一串,便可知晓网页有嵌入javascript脚本。由于前面踩过坑,立即用requests库检查了下,发现可以正常返回源码中数据,松了一口气。(爬取网站前先检查一下其反爬策略还是很有必要的,之前就曾遇到过返回乱码或者什么都没有的情况)
2、获取原图地址
搜索框中输入’water’,页面跳转到如下:
查看源代码和首页差不多,接着是图片真实地址链接。我在这里绕了几个弯,具体不叙述。
加上前面pixabay的坑,最后得到经验:直接点击官方下载按钮,从对话框中看到图片真实链接,这是最保险的模式。(因为有时“查看模式”并不能提供真实链接,而且有时也并不能下载得到。)
最后发现真实地址有两种形式,还发现图片有jpg和jpeg两种格式:
我第一次以为链接只有第二种,结果辛辛苦苦匹配正则下载的图确是这样的:
有些图并不能打开,又得到教训:爬虫爬下的图打不开时,可能链接地址是错的。
对比源码,发现’data-pin-media’和’src’中皆含地址链接数据,用正则提取,再将images换成static即为链接。图片格式有两种,为了方便后面命名,我还是分成了两段来取。用最简单的(.*?),结果又出问题了:
#正则是这样的 pattern=re.compile(r'<img.*?data-pin-media="https://images.pexels.com/photos/(.*?)/(.*?)?w=800.*?>',re.S) items=re.findall(pattern,result)
每个链接后面都多了个’?’,如何去掉字符串最后一位字符,我记得string类是没有像list类的pop()方法的,又考验python基础。不过这个简单啦~
for item in items: print 'https://static.pexels.com/photos/'+str(item[0])+'/'+str(item[1][:-1])
3、批量下载
这特么才是关键啊!
网页使用瀑布流模式,是没有页码的,无法像之前那样一页一页遍历。selenium还不熟练,这下如何是好。又倒回去看源码。 然后发现了这一堆!
点击源码中href=”/search/water/?page=2”,页面跳转
地址栏里链接变成 https://www.pexels.com/search/water/?page=2
熟悉的感觉,这几个图好像刚刚那个页面也出现过。。。
回第一页源码中数了下,一共才发现15张缩略图的链接。
然后全明白了,回page1一数正好吻合。
原来获取图片接口在源码里啊,每一页15张,308就是最大页数了。
接着就简单了,又可以循环遍历,避开瀑布流啦^_^
试着下载图片,结果又出幺蛾子了:
目测是爬虫被网站发现了,只好将urllib2改为requests的get方式,设置user_agent和header, user_agent还设了随机数,爬完一页time.sleep(3)。
通过。
过后查了一下,有个帖子总结的很好。
最后用之前Pixabay的模版又做了个下载器。
二、结果
最后来看下结果已经存在的图自动跳过。
强迫症患者,终于等到10页图全部下载完才睡。。。
本来准备随便拿个图看效果
结果太大了上传不了。。。。
(比如上图第一排最右边的那个图就有27M)
三、代码
源码我上传到Github了:https://github.com/LUCY78765580/Python-web-scraping/blob/master/pexels.py
这个爬虫还是可以的,就是速度太慢了了,等学了多线程再回来优化。
相关文章推荐
- Python爬虫入门-python之爬取pexels高清图片
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- python网络爬虫入门(二)——用python简单实现调用谷歌翻译
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- python爬虫----图片爬取之高清原图
- Python网络爬虫(三)——Beutiful Soup库入门
- Python开源网络爬虫或网络蜘蛛scrapy入门遇到问题
- Python爬虫入门-scrapy爬取唯一图库高清壁纸
- JAVA从菜鸟【入门】到新手【实习】一一Python制作的第一个实战项目“网络爬虫”
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Python网络爬虫与信息提取-Day12-Re(正则表达式)库入门
- scrapy学习笔记——Python网络爬虫利器(入门教程)
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- python 网络爬虫入门(一)———第一个python爬虫实例
- Python黑客编程2 入门demo--zip暴力破解
- python网络爬虫入门(一)——简单的博客爬虫
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- python 网络爬虫入门(1)———第一个python爬虫实例
- Python网络爬虫入门(五)—— 巧用抓包,爬遍SCU玻璃杯事件所有神回复