Python爬取猫眼电影是一个非常有趣的话题,它可以帮助我们更好地了解电影的信息,并且可以节省大量的时间。
要使用Python爬取猫眼电影,首先要准备好相关的库和工具,比如requests、BeautifulSoup、re等。然后就是要分析网站的HTML代码,找到想要的数据所在的位置,并根据这些位置来获取数据。
import requests from bs4 import BeautifulSoup url = 'https://maoyan.com/films' # 电影列表页面 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'} # 请求头部信息 response = requests.get(url, headers=headers) # 发送请求,获得响应内容 html_doc = response.text # 获得HTML文本内容 soup = BeautifulSoup(html_doc, 'lxml') # 使用BeautifulSoup解析HTML文本内容 items = soup.find_all('div', class_='movie-item') # 找到所有电影条目div标签 for item in items: # 遍历所有电影条目div标签 name = item.find('a', class_='name').text # 找到电影名字a标签并获得文本内容 star = item.find('p', class_='star').text # 找到主演p标签并获得文本内容 print(name, star) # 打印出电影名字和主演信息
上述代码中,我们使用requests库来发送请求,然后使用BeautifulSoup库来解析HTML文本内容。之后就是要找到想要的数据所在的位置:我们先找到了所有的电影条目div标签;然后遍历这些div标签;之后就是要找到里面包含我们想要数据的a标签和p标签;最后就是将这些数据打印出来。
本文转载至知乎ID:Charles(白露未晞)知乎个人专栏
下载手机App,0基础随时随地学编程>>戳此了解
T_T 愚人节似乎不宜出门?
那就爬波猫眼电影看看有什么值得看的电影?
于是T_T
大概是没什么技术含量的~~~
Let's Go!!!
百度网盘下载链接: https://pan.baidu.com/s/1WJ8PL5nydttXjteQOWqRrg
密码: v78a
Python版本:3.6.4
相关模块:openpyxl模块;requests模块;win_unicode_console模块;bs4模块;以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
目的:
爬取http://maoyan.com/films中的电影信息:
其中要爬取的内容为:
电影名、电影评分、电影介绍页链接以及电影简介。
思路:
先爬取电影名、电影评分和电影介绍页链接,再根据电影介绍页链接爬取电影简介。
这么算下来,一页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)。
至于验证码获取的接口以及验证码如何自动识别,我就不一一介绍了,测试版本里也没有(源代码里获取验证码的接口只是临时接口,所以不是一个普适的版本)。。。
感兴趣的同学可以自己研究一下~~~
挺简单的,方案也很多T_T,但是为了避免别人滥用我就不公布最终的验证码破解版本了。
在cmd窗口中运行MY_Spider.py文件即可。
如下图所示(爬取20页数据):
其中9分以上的电影有:
摔跤吧!爸爸
战狼2
小萝莉的猴神大叔
厉害了,我的国
寻梦环游记
霸王别姬
速度与激情7
红海行动
神秘巨星
疯狂动物城
冰雪奇缘
泰坦尼克号
看不见的客人
泰坦尼克号3D
速度与激情8
奇迹男孩
缝纫机乐队
夏洛特烦恼
战狼
湄公河行动
蝙蝠侠:黑暗骑士
九品芝麻官
头号玩家
唐人街探案2
前任3:再见前任
帕丁顿熊2
公牛历险记
辛德勒的名单
一个人的课堂
智取威虎山
你的名字。
英雄本色
二十二
美国队长2
刀剑神域:序列之争
银河护卫队
变形金刚4:绝迹重生
我的少女时代
春光乍泄
闪光少女
熊出没·变形记
羞羞的铁拳
芳华
捉妖记
建军大业
侏罗纪世界
熊出没·奇幻空间
寻龙诀
末日崩塌
老炮儿
熊出没之熊心归来
比得兔
恋爱回旋
南极之恋
追龙
银河护卫队2
滚蛋吧!肿瘤君
美人鱼
唐人街探案
阿凡达
拆弹·专家
魔兽
钢铁侠3
蓝精灵:寻找神秘村
至爱梵高·星空之谜
爱在记忆消逝前
碟中谍5:神秘国度
傲娇与偏见
That'all~~~
看电影去了~~~
代码截止2018-04-01测试无误。
若日后猫眼电影有较大更新,源代码将仅供参考。
本文转载至知乎ID:Charles(白露未晞)知乎个人专栏下载手机App,0基础随时随地学编程戳此了解导语又是一年春运,很多地方的火...
本文转载至知乎ID:Charles(白露未晞)知乎个人专栏下载手机App,0基础随时随地学编程戳此了解导语再次更新一下抖音视频批量下...
本文转载至知乎ID:Charles(白露未晞)知乎个人专栏下载手机App,0基础随时随地学编程戳此了解导语利用Python简单地预测一下NBA...
本文转载至知乎ID:Charles(白露未晞)知乎个人专栏下载手机App,0基础随时随地学编程戳此了解导语Hi,好久不见~~~两周没写东西...
Python3 File read() 方法 Python3 File(文件) 方法概述read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。...