美文网首页
mm131爬虫

mm131爬虫

作者: tf2jaguar | 来源:发表于2021-08-16 16:13 被阅读0次

    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爬虫

          本文链接:https://www.haomeiwen.com/subject/hdambltx.html