Python爬虫系列之爬取猫眼电影(一)
前言
如果大家经常阅读Python爬虫相关的公众号,都会是以爬虫+数据分析的形式展现的,这样很有趣,图表也很不错,今天了,我就来分享猫眼电影评分在9以上的爬虫及分析,看看有什么值得看的电影?
开发工具
Python版本:3.6.4
相关模块:
openpyxl模块;
requests模块;
win_unicode_console模块;
bs4模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
主要思路
目的:
爬取猫眼电影信息:
其中要爬取的内容为:
电影名、电影评分、电影介绍页链接以及电影简介。
思路:
先爬取电影名、电影评分和电影介绍页链接,再根据电影介绍页链接爬取电影简介。
这么算下来,一页30部电影,需要31个requests。
结果只是为了爬这么点数据,效率可想而知T_T
最后把爬到的数据存入Excel中。
具体实现方式详见在主页获取相关文件中的源代码。
补充说明
(1)cookies.py文件中的cookie获取方式
按上图所示方式获得cookie值后填入cookies.py文件的相关位置中:
第一个Cookies列表是不含登录信息的cookie;
第二个login_Cookies列表是含登录信息的cookie。
含登录信息的cookie获取方式和不含登录信息的cookie获取方式相同,但是需要事先在网页上登录(登录选项在网页的右上角)。
(2)关于猫眼的反爬虫
猫眼电影的反爬虫机制十分到位。T_T
首先是对于非登录用户,你只能查看前100页的电影信息。其次,如果你的请求过于频繁,是会被封的:
经过测试,得到的结论如下:
设置随机的时间间隔并不有效防止ip被封;
更换cookie值无法防止ip被封;
爬取20页左右的电影数据后代码就GG了等等。
没有仔细研究猫眼电影是如何识别爬虫的。
但是可以感觉出其识别机制很智能。
比如我被封之后想尝试通过更换ip解决,但是我发现更换ip地址之后可以获取的数据量竟然比前一个ip少了很多。
因此,本人提供的正版源代码没有想过和猫眼的维护人员斗智斗勇,只是加了个随机的时间间隔。可以爬取的数据量在25页左右。
爬虫解决方案
为了不让爬虫爱好者失望,还是稍微提一下吧~~~
网上关于反爬虫机制的解决方案很多,比如使用代理池之类的等等。
本人只是针对猫眼电影信息爬取过程中存在的反爬虫机制提出一项解决方案。
方案很简单,它不就是想让我们输入验证码来证明我们是人嘛~~~那就证明给它看咯。
简单测试后可以发现:
只要把识别之后的验证码和一些其他参数以post的方式请求:
http://maoyan.com/films?__oceanus_captcha=1
这个链接就可以解除ip封锁~~~很简单。
我在相关文件中提供了一个测试版本(test.py)。
使用演示
在cmd窗口中运行MY_Spider.py文件即可。
如下图所示(爬取20页数据):
其中9分以上的电影有:
摔跤吧!爸爸
战狼2
小萝莉的猴神大叔
厉害了,我的国
寻梦环游记
霸王别姬
速度与激情7
红海行动
神秘巨星
疯狂动物城
冰雪奇缘
泰坦尼克号
看不见的客人
泰坦尼克号3D
速度与激情8
奇迹男孩
缝纫机乐队
夏洛特烦恼
战狼
湄公河行动
蝙蝠侠:黑暗骑士
九品芝麻官
头号玩家
唐人街探案2
前任3:再见前任
帕丁顿熊2
公牛历险记
辛德勒的名单
一个人的课堂
智取威虎山
你的名字。
英雄本色
二十二
美国队长2
刀剑神域:序列之争
银河护卫队
变形金刚4:绝迹重生
我的少女时代
春光乍泄
闪光少女
熊出没·变形记
羞羞的铁拳
芳华
捉妖记
建军大业
侏罗纪世界
熊出没·奇幻空间
寻龙诀
末日崩塌
老炮儿
熊出没之熊心归来
比得兔
恋爱回旋
南极之恋
追龙
银河护卫队2
滚蛋吧!肿瘤君
美人鱼
唐人街探案
阿凡达
拆弹·专家
魔兽
钢铁侠3
蓝精灵:寻找神秘村
至爱梵高·星空之谜
爱在记忆消逝前
碟中谍5:神秘国度
傲娇与偏见
That'all~~~
看电影去了~~~
若日后猫眼电影有较大更新,源代码将仅供参考。