乐趣区

爬虫再现之妹子图全站爬取之初级版本

#### 做了好久的爬虫 + 少量 web,突然开始专门做 web 开发稍微有点不太适应, 毕竟比起来爬虫相对还是稍稍有点无聊的,
但是又不想荒废了自己的爬虫, 就准备写点关于爬虫的东西, 把以前用过的东西都再过一边,
毕竟感觉爬虫跟 web 没有太大的区别, 并发, 缓存, 分布式, 消息队列......

  • 言归正传

    • 之所以爬取妹子图, 一是因为简单方便, 比较适合做项目展示, 写博客不就是为了展示么?
    • 目前就是准备先完整的爬取, 再并发 (多进程 + 多线程 or 多线程 + 协程 (asyncio)), 全站爬取 (深度优先 or 广度优先), 数据解析 (清洗?), 数据去重 (redis), 数据储存 (MongoDB, Mysql, csv, excel), 定时更新 (crontab), 增量爬取 ….
    • 再三声明: 本次爬取, 会分别使用 requests + scrapy 爬取, 并稍微有点深度的解析 scrapy 框架使用, 并带领喜欢爬虫,以及想要学习爬虫的同学缓缓深入, 爬虫的天堂!
    • 在本连载连载期间, 会分别对这些爬虫中所要使用的类库以及工具的重要部分做专门的实例讲解, 并单独开一篇文章专门讲解!
    • 别急别急, 慢慢来。。。。
  • 开发环境: win10, Python3.6, fidder, Pycharm
  • 开发主要工具库: Requests, BeautifulSoup, Xpath, re, scrapy

1. 爬取妹子第一步: 浏览并分析目标网站结构

目的: 搜索目标数据所在, 分析网站结构, 设定合理的爬取方案, 这块主要是确定行动方案, 其他的后面再说。

– 进入该网站首页, 看到该网站总共有 8 个大分类, 也就是说我们爬取的数据主要就是这么几个大的分类, 首页跟每日更新可以自动过滤. 毕竟我们后面也是需要分类的, 首页跟每日更新, 没有明确的确定分类, 也就是说我们只需要在意中间 6 个即可. 如下图所示:

再往下看, 会发现在这 6 个分类里面, 都有总页数, 可以确定每个分类需要获取的总页数, 并且发现街拍跟自拍这两项跟其他的分类不一样, 这两个直接每个大分类下面都是完整的照片, 而另外四个分类下面, 是有若干个小标题, 也就是说, 这两个分类没有下一层;

接下来点击剩下的四个分类的任意小标题进入, 发现我们要的图片, 就在这里啊!哇咔咔 …..

在这里你会发现, 这每个标题就是一个组图, 这个下面的总页数就是每个组图的照片数量; 也就是说图片的链接就是在这个页面获取到的, 这就是我们获取图片的地方; 至此, 网页结构分析完毕。

总结:爬虫大致的过程就是 首页—> 获取到分类链接 -> 循环分类 -> 获取每个分类的总页数 -> 循环总页数 -> 获取每个页面的组图主题以及每个组图的总页数 -> 获取图片

2. 爬取妹子第二步: 分析网站 url 结构 跟 请求

- 一般网页请求都是 http,https 请求, 抓包工具最合适的是 fidder , 谁要是说花瓶的话,我肯定要喷他的, 要是说大鲨鱼, 我也会喷他, 毕竟他们都不够合适啊;
当然, chrome 的 f12 也是抓包分析的利器, F12 适合简单的分析, 分析下简单的 url 结构还是可以的, 一般的网站 F12 即可快速搞定;
- fidder 抓包原理: fidder 启动后建立一个本地代理服务器, 类似 vpn , 默认监听 127.0.0.1:8888, 拦截并转发请求;
- 关于 fiddler 的抓包方法, 以及配置使用什么的, 由于本人太懒, 就不打算描述了, 看家尽可 百度谷歌必应, 一大把的教程; so easy....

目的:拼接所要循环的 url , 分析请求以及反爬

抓包分析 url 结构:点击查看分类的第二页, 如下图所示, 可以简单的分析出分类的翻页链接, 可以照此拼接出来, 而且页数的数字换成 1 之后, 页面会跳转至分类首页, 而不是带页数的链接, 但是无论跳不跳转, 网页的数据不变, 都不影响我们的数据获取;


3. 爬取妹子图第三步: 分析数据所在,获取网页数据并解析

这一步就要考虑到获取图片链接并采取反爬措施进行图片请求

看到这里大家就能够一目了然的找到相关图片链接; 这个链接就是我们需要获取的数据的链接; 毕竟后面的 jpg 太明显不是?
别急, 往下继续看, 看看图片下面这是啥?—->

对, 你没看错, 这就是组图的数量, 也就是我们需要获取该组图下的图片数量; 为了谨防万一,我们需要多找几个组图查看下, 其实不查看也没啥, 毕竟这网站的设计并不复杂, 也不会设计太复杂, 那为啥还要看啊?为了犒赏一下你辛苦的眼睛, 找几组代表性的养养眼, 哎!操碎了心啊 …..

到此, 分析完毕. 至于代码部分呢, 接下来给你们地址, 大家自行去看即可. 下一节, 讲下我的代码, 以及实现这个的思路, 代码地址

退出移动版