Python爬取mm131图片

系统 1870 0

Python爬取mm131图片

  • 写在前面的话
    • 爬虫第一步 安装python环境
    • 爬取图片要用到的三方库
    • 创建一个py文件
    • 代码运行
    • 遇到的过的问题
    • 写在后面的话

写在前面的话

说起来来写爬虫这件事,不是心血来潮。我最近想让自己的网站流量提升一下,所以就想着能不能搞点美女图片来提高一下点击量。一开始我是直接使用了干货api里面的美女图片接口在自己的网站上展示图片,这样一来我服务器的带宽压力会小很多,毕竟小水管服务器压力还是蛮大的(阿里云服务器最低配置),后来使用发现,这个api接口提供的数据有时候图片会被屏蔽(别人网站图片做了防盗链)so 我需要自己爬取图片放在网站上了,不过还是跟朋友聊了聊。这样搞你的网站还是卖茶叶的网站么,后来我想想也是,还是没有放上去。但是图片是爬了,不得不说mm131网站上的图片是真的多。其中遇到一个比较低级的错误卡了我一个小时,代码写到凌晨三点多,也是不容易啊!所以不喜欢勿喷哦

爬虫第一步 安装python环境

这里不再赘述,需要学习的小伙伴自行修炼(廖雪峰的python教程)
https://www.liaoxuefeng.com/wiki/897692888725344/897692941155968

爬取图片要用到的三方库

这个三方库其实类似我们java里面的okhttp框架,主要是做网络请求的。它们分别是:
requests
urllib3

这两个库都可以爬mm131图片,至于我为啥会提到这两个库。有经验的小伙伴肯定会说,任意一个不都可以吗?是的,只是我在使用第一个库的时候误以为无法做防盗链处理,其实是我还不熟悉啦!所以这里我们主要使用第二个库 urllib3

创建一个py文件

我这里图简单就创建了另一个文件名叫hello.py的文件

代码:

            
              
                import
              
               urllib3
startPage 
              
                =
              
              
                4940
              
              
                #开始页
              
              
page 
              
                =
              
              
                4941
              
              
                #结束页
              
              

http 
              
                =
              
               urllib3
              
                .
              
              PoolManager
              
                (
              
              
                )
              
              
                #网络请求实例
              
              
                #获取图片
              
              
                def
              
              
                getPicture
              
              
                (
              
              page
              
                )
              
              
                :
              
              
    pic_num 
              
                =
              
              
                1
              
              
                #图片
              
              
    url_pic_num 
              
                =
              
              
                1
              
              
    all_num 
              
                =
              
               page 
              
                -
              
               startPage
              
                #需要遍历的所有组图
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              startPage
              
                ,
              
              page
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "\r rage:{:}%"
              
              
                .
              
              
                format
              
              
                (
              
              
                (
              
              i
              
                -
              
              startPage
              
                )
              
              
                *
              
              
                100
              
              
                /
              
              all_num
              
                )
              
              
                )
              
              
                while
              
              
                True
              
              
                :
              
              
            url 
              
                =
              
              
                "http://img1.mm131.me/pic/"
              
              
                +
              
              
                str
              
              
                (
              
              i
              
                )
              
              
                +
              
              
                "/"
              
              
                +
              
              
                str
              
              
                (
              
              url_pic_num
              
                )
              
              
                +
              
              
                ".jpg"
              
              
                # url ="http://img.51miz.com/Photo/2017/03/27/14/P221692_3f0c82bbcf579253d1218b5310969a0e.jpeg"
              
              
            headers 
              
                =
              
              
                {
              
              
                'Upgrade-Insecure-Requests'
              
              
                :
              
              
                '1'
              
              
                ,
              
              
                'User-Agent'
              
              
                :
              
              
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36Name'
              
              
                ,
              
              
                #针对防爬虫网站需要设置
              
              
                "Referer"
              
              
                :
              
              
                "http://www.mm131.com/"
              
              
                #针对防爬虫网站需要设置
              
              
                }
              
              
                print
              
              
                (
              
              url
              
                )
              
              
                try
              
              
                :
              
              
                response 
              
                =
              
               http
              
                .
              
              request
              
                (
              
              
                'get'
              
              
                ,
              
              url
              
                ,
              
              headers
              
                =
              
              headers
              
                )
              
              
                res
              
                =
              
              response
              
                .
              
              data
                
              
                if
              
               response
              
                .
              
              status
              
                !=
              
              
                200
              
              
                :
              
              
                #判断这个图片路径是否存在,不存在跳过
              
              
                    url_pic_num 
              
                =
              
              
                1
              
              
                #记得加一哦
              
              
                break
              
              
                #change path
              
              
                path 
              
                =
              
              
                "/Users/xxx/Desktop/code/yyy/beauty/"
              
              
                +
              
              
                str
              
              
                (
              
              i
              
                )
              
              
                +
              
              
                str
              
              
                (
              
              pic_num
              
                )
              
              
                +
              
              
                ".jpg"
              
              
                #指定文件全路径名
              
              
                with
              
              
                open
              
              
                (
              
              path
              
                ,
              
              
                'wb'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
                #将图片文件写入到指定目录
              
              
                    f
              
                .
              
              write
              
                (
              
              res
              
                )
              
              
                    f
              
                .
              
              close
              
                (
              
              
                )
              
              
                pic_num 
              
                +=
              
              
                1
              
              
                url_pic_num 
              
                +=
              
              
                1
              
              
                except
              
              
                :
              
              
                url_pic_num 
              
                =
              
              
                1
              
              
                #失败直接跳过
              
              
                print
              
              
                (
              
              
                "error"
              
              
                )
              
              
                break
              
              
                def
              
              
                main
              
              
                (
              
              
                )
              
              
                :
              
              
                #程序入口
              
              
   getPicture
              
                (
              
              page
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
   main
              
                (
              
              
                )
              
            
          

代码运行

按照上面的代码写好之后,接下来当然就是运行我们的代码啦!

cd 进入到我们的代码文件的路径下

            
              python hello.py

            
          

糟糕!
程序报错了!
我们读一下错误提示:

找不到urllib3!!!

原因是我们引入了urllib3这个库却没有安装这个库!
那接下来我们使用

            
              pip install urllib3

            
          

使用mac的小伙伴要注意了!需要加入sudo 不然会提示安装失败原因是没有权限

            
              sudo pip install urllib3

            
          

安装完成之后我们继续使用python hello.py 跑一下我们的程序:
Python爬取mm131图片_第1张图片
lalala大功告成!
Python爬取mm131图片_第2张图片

遇到的过的问题

整个代码实现过程中查了很多文档和资料,虽然之前有python的开发经验(2016年的时候为了生活,一周学会python上项目直接刚,刚不了滚蛋!)。我之前是做android开发的在中软国际做过,那时候团队十多个人(开发加测试)每天的动作很轻松。所以后来感觉不想一直这样,感觉是在混日子!出来以后进了一家小外包公司。两个月一个app,每天都在coding。做了三个项目之后实在受不了了!主要是受不了那个十八年工作经验的php leader,嘴比手厉害,别人做的东西都是low逼,自己没有产出。就进了一家极客公司,他们主要业务是通过爬虫获取各类新闻资讯数据,然后利用机器人发推文到各大社交平台网站。我当时是用Django做开发。从android 直接到 python,一周之内。我只依稀记得当时白天除了完成任务,晚上还要继续学习python基础知识。过的是真的惨,不过确实学到了很多东西,虽然现在都没怎么用到。

            
              言归正传!刚刚有点扯远了。。。
在写这个爬虫的时候主要遇到的几个坑就是sudo 那个地方卡了一下,还有主要是 反爬虫那个地方		设置Referer 地址设错了。这个地方还是看了别人的爬虫程序才发现了。所以才有使用过requests 和 urllib3两个库的乌龙。
[参考的代码](https://github.com/eqblog/mm131_spider_threading/blob/master/base_spider_threads.py)

这个代码比我的高级,还用了多线程,但是代码比较久远,mm131已经做了一些调整了 so仅当参考!
还有个需要大家需要注意的地方就是,虚幻和设置postion的地方大家还需要仔细看看,代码还是有很多可以优化的地方的。

            
          

写在后面的话

如果你喜欢我的文章的话,就请关注一下吧!


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论