说起来来写爬虫这件事,不是心血来潮。我最近想让自己的网站流量提升一下,所以就想着能不能搞点美女图片来提高一下点击量。一开始我是直接使用了干货api里面的美女图片接口在自己的网站上展示图片,这样一来我服务器的带宽压力会小很多,毕竟小水管服务器压力还是蛮大的(阿里云服务器最低配置),后来使用发现,这个api接口提供的数据有时候图片会被屏蔽(别人网站图片做了防盗链)so 我需要自己爬取图片放在网站上了,不过还是跟朋友聊了聊。这样搞你的网站还是卖茶叶的网站么,后来我想想也是,还是没有放上去。但是图片是爬了,不得不说mm131网站上的图片是真的多。其中遇到一个比较低级的错误卡了我一个小时,代码写到凌晨三点多,也是不容易啊!所以不喜欢勿喷哦
这里不再赘述,需要学习的小伙伴自行修炼(廖雪峰的python教程)
https://www.liaoxuefeng.com/wiki/897692888725344/897692941155968
这个三方库其实类似我们java里面的okhttp框架,主要是做网络请求的。它们分别是:
requests
urllib3
这两个库都可以爬mm131图片,至于我为啥会提到这两个库。有经验的小伙伴肯定会说,任意一个不都可以吗?是的,只是我在使用第一个库的时候误以为无法做防盗链处理,其实是我还不熟悉啦!所以这里我们主要使用第二个库 urllib3
我这里图简单就创建了另一个文件名叫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的地方大家还需要仔细看看,代码还是有很多可以优化的地方的。
如果你喜欢我的文章的话,就请关注一下吧!