@

前言



在我们写文章(博客、公众号、自媒体)的时候,常常觉得自己的文章有些老土,这很大程度是因为配图没有选好。

笔者也是遇到相同的情况,顺便解决其中一个案例,给大家一些技术上的参考和借鉴

并且,我们搜图片如果去百度,会遇到两种情况:非高清或者带水印。这都是我们所忌讳的东西。笔者此次通过图虫创意抓起高清小图,虽然不是大图,但是在火热的移动端阅读上是足够的

分析



废话说完了,我们开始分析怎么样才能获取这样的图片呢。

理想状态

  • 我们的理想状态就是一个网页,我们的目标网页,把图片<img src="xxxxxx">直接放到html中。我们的爬虫可以直接解析。这种情况,就像你写的博客,个人网站的图片一样,简单嵌入

  • 或者就是通过后台ajax传输图片地址引用。我们不清楚是否这样!

实际分析

但事实这种肯定会被理想破灭,因为不可能!他以图片为核心业务要你注册,购买等等,怎么可能就这么容易的嵌入进入被你找到。

  • 那它到底如何实现呢?我们分析一下!

首先打开网页,检查图片,发现它的网页图片来源不唯一。有两个主要域名icewel,并且后面的编号还不唯一,但是可以尝试发现相同域名不同后缀的图片地址结果相同!(例如icweiliimg9icweiliimg/效果相同)。



我们发现原来这个搜索url会变化,但是这个查看网页源代码发现并没有我们想要的图片地址。那么我们肯定知道它要么从ajax渲染,或者就藏在js中进行混淆或者加密。我们发现这个xhr中并没有想要的数据,并且他其实藏在js中。其实这个可以猜想到的,因为它的url既然跟着变化那么返回的数据肯定是有区别的。

那么分析就到这里,剩下就是python爬虫的模拟和解析了。

爬虫实现

前面说到已经知道它的数据源,我们用python编写爬虫需要进行模拟。经过测试发现它需要进行一些验证,其中包过cookiewluuid字段(只验证存在,不验证正确性)。

那么我们编写一段代码就能拿到网页html。但是问题来了。数据藏在js里面啊!!!

我们只能用正则进行套了!

对于这个js,我们通过js=soup.select('script') js=js[4]即可获取。



对于有用数据,只能正则截取。

 pattern = re.compile(r'window.hits = (\[)(.*)(\])')
va = pattern.search(str(js)).group(2)#解析js内容

但是这个类似json的串用,拼接我们无法直接使用spilt分组分开,但是我们可以从}全部替换成},,那么就三个,,,我们就可以分割而不影响其他json串内,;split之后每组都满足json串格式直接转成json取值即可!



那么剩下拿到url直接构造url然后下载图片即可!

其他注意

图片下载:

  • 下载图片有很多图片无名称或者名字相同,避免这个不下载要进行编号
  • 两个url域名需要尝试下载其中一个成功即完成下载!

爬虫方面

  • 全程不需要登录,下载为高清小图。后续可以考虑研究登录后的大图分享给大家!

其他

  • 創建图片路径要考虑路径是否存在!

效果与总结

通过上述分析:编写爬虫:



测试结果:

打开文件夹:



发现nice!你只需要输入关键词即可实现自动下载,虽然是小图,但是效果不错!

移动端公众号和csdn效果!

不难发现整个过程就是分析和处理字符串的逻辑难点。数据结构与算法扎实了处理问题都不难,!所以,如果要学习数据结构与算法,爬虫请关注我吧!公众号:bigsai

最新文章

  1. MacOS长按无效问题
  2. 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略
  3. Oracle 自定义函数Function
  4. cloudera manager 及CDH卸载
  5. asp.net 中 .ASPX 与.CS文件的关系
  6. CPP--借助神器VS理解内存存储
  7. 【Alpha】第一次项目冲刺
  8. SpringCloud的应用发布(四)vmvare+linux,网关代理
  9. uboot中的中断macro宏
  10. python面向对象之继承/多态/封装
  11. 包含min函数的栈 ,二叉树的镜像
  12. 027_nginx常见优化参数
  13. 2015-10-05 js3
  14. Mule ESB 介绍
  15. 设计table表格,用js设计偶数行和奇数行显示不同的颜色
  16. java发送http连接
  17. np.clip截取函数
  18. java 多线程11:volatile关键字
  19. fastjson反序列化JdbcRowSetImpl
  20. Java ThreadLocal 源代码分析

热门文章

  1. &lt;&lt;Modern CMake&gt;&gt; 翻译 1. CMake 介绍
  2. 数据库---T-SQL语句(一)
  3. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer
  4. 【未解决】iOS QBImagePickerController访问相册没有取消和确定按钮
  5. 如何使用Arrays工具类操作数组
  6. 后端小白的VUE入门笔记, 前端高能慎入
  7. HDP Hive性能调优
  8. Netty服务端启动过程相关源码分析
  9. HTML5标签的使用和作用
  10. git submodule 子模块