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爬虫实战——猫眼电影案例相关推荐

  1. Python爬虫实战——获取电影影评

    Python爬虫实战--获取电影影评 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用Python爬取指定电影的影评, 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...

  2. python爬虫实战—豆瓣电影TOP250

    系列文章目录 python爬虫实战 前言 本文主要用python爬取豆瓣电影TOP250数据并将爬取到的数据保存到MySQL中.同时也介绍了该项目中遇到的问题. 爬取内容:电影名称,电影别名,导演,主 ...

  3. Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】

    爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...

  4. 【Python爬虫】猫眼电影榜单Top100

    这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...

  5. Python爬虫:猫眼电影反爬—动态字体处理(2020)

    2020年5月25日更新,在爬了几百条后发现,有少部分数据会出错,出错概率很小.目前推测其原因是因为欧氏距离在对于(-1,0)和(0,1)这种数据计算结果差异不大的原因.有精度需求的建议改用别的距离计 ...

  6. 【python爬虫】猫眼电影TOP100电影封面下载

    在上次爬取信息的基础上下载图片. 下载挺容易的 在封面命名上画了大笔时间..... import requests import bs4 from bs4 import BeautifulSoup i ...

  7. Python爬虫实战之电影爬取过程

    俗话说,兴趣所在,方能大展拳脚.so结合兴趣的学习才能事半功倍,更加努力专心,apparently本次任务是在视频网站爬取一些好看的小电影,地址不放(狗头保命)只记录过程. 实现功能: 从网站上爬取采 ...

  8. xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验

    影评许可证 公众号[2019]第22期 本栏目由"数据皮皮侠"独家呈献 专场 python爬虫实战--豆瓣电影get初体验 2019.10.28 / 早上7点场 / 免费 本期&q ...

  9. Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单

    在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...

最新文章

  1. 数制之非十进制数转十进制数
  2. CentOS7 0安装Maven
  3. Hadoop基础-HDFS集群中大数据开发常用的命令总结
  4. openssh设置免密码登录远程服务器
  5. 算法练习day17——190405
  6. 【Linux】一步一步学Linux——sudo配置文件详解(106)
  7. java一对一关系_Java初学者疑难杂症之:一对一和一对多的关系
  8. win10 查看系统运行时间
  9. 165体重_身高165的女性体重多少比较合适?过胖和过瘦都不太好
  10. MySql 存储过程 光标只循环一次
  11. mysqldump+系统计划任务定时备份MySql数据
  12. 微型计算机原理与应用实验指导书,微型计算机技术与应用实验指导书.doc
  13. 任玉刚【Android开发艺术探索】读后笔记二
  14. 航测无人机航线规划原理
  15. 黑客是如何入侵服务器的
  16. 呵护流量尖峰时刻,我们是互联网的“守夜人”
  17. html制作小短片,教你制作微视频 一分钟成为电影大师!
  18. MySQL中按天、自然周、月、季度、年份统计
  19. 初始C语言——字符串,转义字符,循环语句
  20. RTL8197F/RTL8812F WiFi设置为WPA3加密手机提示拒绝连接问题解决方案

热门文章

  1. spotify歌曲下载_如何像真正的DJ一样让Spotify在歌曲之间进行淡入淡出
  2. excel下拉让函数参数部分不变
  3. 服务器并发量估算公式和计算方法
  4. PaddlePaddle第二周学习笔记
  5. 1 Flask_FileUpload
  6. 定制材料 GPTMS修饰的纳米二氧化硅(GPTMS-SiO2)/C18键合纳米金修饰二氧化硅颗粒/二氧化硅修饰咪唑型离子液体
  7. 2018ec final赛后总结
  8. unity3d RTS即时战略 鼠标点选主角移动到点击地面位置 代码
  9. 网络系统管理Debian模块||初始化环境、网络地址规划
  10. MySQL 删除数据后自增长主键id依旧占用问题