python爬虫实战——猫眼电影案例
python爬虫实战——猫眼电影案例
·背景
笔者上一篇文章《基于猫眼票房数据的可视化分析》中爬取了猫眼实时票房数据,用于展示近三年电影票房概况。由于数据中缺少导演/演员/编剧阵容等信息,所以爬取猫眼电影数据进行补充。关于爬虫的教学内容,网络上一搜就有很多了,这里我以个人的爬虫习惯,介绍此次过程中所用到的库和代码。 流程图,如下图所示:
·抓包
Ajax异步加载的网页,加载数据的URL需要通过抓包获取。一般确认是否异步加载,只需要右键打开网页源代码,如果源码文字内容与前端展示的结果不一致,则属于异步加载。这时需要按F12打开开发者工具的Network,重新刷新网页,就能看到真正的URL。如下图所示,开发者工具中红色框的URL才是真正加载数据的URL。
·concurrent.futures库
利用多核CPU提升执行速度。主要包含两个类:ThreadPoolExecutor和ProcessPoolExecutor,当执行属于IO密集型时,使用ThreadPoolExecutor开启多线程。当执行属于CPU密集型时,使用ProcessPoolExecutor开启多线程。
·requests库
用于发送网络请求。网络请求有get和post两种方式,get()可以直接获取数据,post()需要传递参数后才能获取数据。一般网站都是get方式,若需要登录后才能看到数据的网页则属于post方式。而爬虫中post()通常和session()搭配使用,session()用于保存登录后的cookie。
·Beautifulsoup库
用于解析HTML。爬虫需要懂得基本的HTML语言,通过定位不同的标签来提取数据。
·re库
正则表达式,用来检索或替换符合某个模式(规则)的文本。爬虫过程中如果遇到不能直接提取的脏数据时,一般采用re解决。re功能非常强大,而且上手不难,很多方面都可以运用它,所以掌握re也是一个必备技能。
·redis数据库
非关系型数据库,可以存储多种抽象数据类型。由于读写简单快捷,所以笔者将其当做缓存数据库,用于存储待爬取URL,再配合ThreadPoolExecutor多线程进行爬取,满足高并发需求。
·Mysql数据库
关系型数据库,用于存储最终结果。
·实例
首先,确认URL是否需要抓包获取,还是可以直接手工构建。如下图所示,源码内容与前端展示是一致的,所以可以根据传递的参数内容,直接构建URL。
然后,再根据类型、区域、年代这三个参数,构建首页URL,一般地,遇到像猫眼电影这种有多个分类下有多个类别的网站时,我都会先抓取这些标签编码,根据自己感兴趣的内容再去构建多个首页URL。
接着,获取每种分类的页面数量,再构建页面URL,再存到redis中。这么做的原因是猫眼页面查看数量是有限制的,通过遍历所有分类构建URL可以绕过这个限制。
然后,爬取每个页面中影片的ID,再构建详情页URL。由于多线程爬取速度很快,会导致IP暂时被限制登录,所以需要多一个步骤,来判断IP是否已经被封。利用while语句识别存放在redis中的URL列表是否为空,如果为空则停止或进入下一步,否则继续执行。此外,暂无评分的影片不属于考虑范围,所以剔除。
最后,爬取每条详情页URL的信息,同时也需要判断IP是否被限制。由于无票房的影片不属于考虑范围,所以剔除。将结果直接保存到Mysql中。
如下图所示,20110101-20191005期间,有评分有票房的影片总共有10746条,movie_all这个字段包含了导演/演员/编剧,后期还需要做进一步的数据清洗,这里暂时不涉及数据清洗的内容。
·结语
爬虫入门并不是很难,一般按照流程图的步骤就可以完成一次爬虫。不过,大部分网站都是有限制爬虫的,也就是反爬虫。最常遇到的反爬虫就是封IP,这次爬虫也遇到这个问题。此外,验证码也是常见的反爬虫之一。如果能解决这两点,几乎各类型网站都能爬。
python爬虫实战——猫眼电影案例相关推荐
- Python爬虫实战——获取电影影评
Python爬虫实战--获取电影影评 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用Python爬取指定电影的影评, 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...
- python爬虫实战—豆瓣电影TOP250
系列文章目录 python爬虫实战 前言 本文主要用python爬取豆瓣电影TOP250数据并将爬取到的数据保存到MySQL中.同时也介绍了该项目中遇到的问题. 爬取内容:电影名称,电影别名,导演,主 ...
- Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】
爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...
- 【Python爬虫】猫眼电影榜单Top100
这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...
- Python爬虫:猫眼电影反爬—动态字体处理(2020)
2020年5月25日更新,在爬了几百条后发现,有少部分数据会出错,出错概率很小.目前推测其原因是因为欧氏距离在对于(-1,0)和(0,1)这种数据计算结果差异不大的原因.有精度需求的建议改用别的距离计 ...
- 【python爬虫】猫眼电影TOP100电影封面下载
在上次爬取信息的基础上下载图片. 下载挺容易的 在封面命名上画了大笔时间..... import requests import bs4 from bs4 import BeautifulSoup i ...
- Python爬虫实战之电影爬取过程
俗话说,兴趣所在,方能大展拳脚.so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程. 实现功能: 从网站上爬取采 ...
- xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验
影评许可证 公众号[2019]第22期 本栏目由"数据皮皮侠"独家呈献 专场 python爬虫实战--豆瓣电影get初体验 2019.10.28 / 早上7点场 / 免费 本期&q ...
- Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单
在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...
最新文章
- 数制之非十进制数转十进制数
- CentOS7 0安装Maven
- Hadoop基础-HDFS集群中大数据开发常用的命令总结
- openssh设置免密码登录远程服务器
- 算法练习day17——190405
- 【Linux】一步一步学Linux——sudo配置文件详解(106)
- java一对一关系_Java初学者疑难杂症之:一对一和一对多的关系
- win10 查看系统运行时间
- 165体重_身高165的女性体重多少比较合适?过胖和过瘦都不太好
- MySql 存储过程 光标只循环一次
- mysqldump+系统计划任务定时备份MySql数据
- 微型计算机原理与应用实验指导书,微型计算机技术与应用实验指导书.doc
- 任玉刚【Android开发艺术探索】读后笔记二
- 航测无人机航线规划原理
- 黑客是如何入侵服务器的
- 呵护流量尖峰时刻,我们是互联网的“守夜人”
- html制作小短片,教你制作微视频 一分钟成为电影大师!
- MySQL中按天、自然周、月、季度、年份统计
- 初始C语言——字符串,转义字符,循环语句
- RTL8197F/RTL8812F WiFi设置为WPA3加密手机提示拒绝连接问题解决方案
热门文章
- spotify歌曲下载_如何像真正的DJ一样让Spotify在歌曲之间进行淡入淡出
- excel下拉让函数参数部分不变
- 服务器并发量估算公式和计算方法
- PaddlePaddle第二周学习笔记
- 1 Flask_FileUpload
- 定制材料 GPTMS修饰的纳米二氧化硅(GPTMS-SiO2)/C18键合纳米金修饰二氧化硅颗粒/二氧化硅修饰咪唑型离子液体
- 2018ec final赛后总结
- unity3d RTS即时战略 鼠标点选主角移动到点击地面位置 代码
- 网络系统管理Debian模块||初始化环境、网络地址规划
- MySQL 删除数据后自增长主键id依旧占用问题