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 跑一下我们的程序:
lalala大功告成!
遇到的过的问题
整个代码实现过程中查了很多文档和资料,虽然之前有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的地方大家还需要仔细看看,代码还是有很多可以优化的地方的。
写在后面的话
如果你喜欢我的文章的话,就请关注一下吧!