mm131爬虫

https://www.mm131.net

源码地址 在最下方

简介

程序员日常养眼系类、人体构造学系列、技术控爬虫系列。

功能很简单,抓mm131网站的m 女图片,理论上可以全部抓取下来。

思路很简单,根据点击思路,模仿人的浏览方式,最终保存到磁盘。

环境

  • python 3.6
  • requests 2.20.0
  • lxml 4.2.5

使用方法

  1. 首先您需要拥有python 3。请自行安装,本文不涉及安装步骤。
  2. 其次将文件下载到本地,目录结构如下
mm131
└─lib
│   └─ parser.py
├─ main.py
├─ README.md
└─ requirements.txt
  1. 然后您需要安装上述环境中的各依赖。
root@localhost:~$ pip install -r requirements.txt
  1. 在 mm131 目录下执行
root@localhost:~/mm131$ python main.py
  1. 稍后您将会看到抓取过程中的输出,并在 mm131 文件夹中看到抓取到的picture。

[图片]

[图片]

[图片]

脚本思路

网站的防刷策略

直接访问 http://www.mm131.net/xinggan/ 将会被强制跳转到 index 界面,并且内容被置为空字符串。

经过Google浏览器的F12,找到了网站的防刷策略,关建在一个叫做 uaabc.js 的脚本文件

var mUA = navigator.userAgent.toLowerCase() + ',' + document.referrer.toLowerCase();
var _sa = ['baiduspider', 'baidu.com', 'sogou', 'sogou.com', '360spider', 'so.com', 'bingbot', 'bing.com', 'sm.cn', 'mm131.net'];
var _out = false;
for (var i = 0; i < 10; i++) {
    if (mUA.indexOf(_sa[i]) > 1) {
        _out = true;
        break
    }
}
if (!_out) {
    var _d = new Date();
    var _h = _d.getHours();
    if (_h >= 0 && _h <= 23) {
        var mPlace = escape(lo).toLowerCase();
        if (mPlace == '%u5317%u4eac%u5e02' || mPlace == '%u56db%u5ddd%u7701' || mPlace == '%u6e56%u5317%u7701') {
            top.location.href = 'https://m.mm131.net/index/';
        }
    }
};

脚本的大概意思是:userAgent 或者 referrer 中必须存在 ['baiduspider', 'baidu.com', 'sogou', 'sogou.com', '360spider', 'so.com', 'bingbot', 'bing.com', 'sm.cn', 'mm131.net'] 中的一个,
否则将会判断你的当前IP是否是 [北京、湖北、四川] 的,是的话将会强制跳转回 index

那么,我们只需要保证 refer 中包含 mm131.net,详情可见 parser.py 中的 set_header() 方法。

 def set_header(self, referer):
        headers = {
            'Pragma': 'no-cache',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,ja;q=0.8,en;q=0.7',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
            'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
            'Referer': '{}'.format(self.__set_referer(referer)),
        }
        return headers

解析界面

获取首页中主题ID、title

访问 http://www.mm131.net/xinggan/ 后会获取最新的20个主题的 ID以及title,这个将会用作下一步获取主题picture。
通过lxml 的 etree 对html进行定位和解析,最终获取到 id和title。详情可见 parser.py 中的 _ids_titles() 方法。

获取一个主题的所有picture链接

因为所有的picture链接都是很有规律的,很容易就可以拼接出某个主题的所有picture链接。详情可见 parser.py 中的 _ids_titles() 方法。

存储

上一步已经获取到了所有的picture链接了,有了链接,接下来就是存储就好了。可以使用串行下载,当然也可以使用并行,根据自己的需要自行调整就好啦。

  • 串行下载一个页面的所有主题picture。get_page
  • 并行下载一个页面的所有主题picture。get_page_parallel

搜索模块

可以直接搜索想要的角色的picture进行下载。但是目前由于官网服务器内部错误,待解决。


abort me

鉴于回复消息不及时,需要数据集的同学,请自行关注公众号: 小张睡不饱
回复:mm131爬虫代码
即可获得源码下载链接,同时还有其他惊喜哟

你可能感兴趣的:(mm131爬虫)