爬虫实战(一)利用scrapy爬取豆瓣华语电影

爬虫第一个项目是爬取豆瓣华语电影,后面将对这部分数据进行分析。

本文也是发表于『运筹OR帷幄』微信公众号的《用数据带你了解电影行业—华语篇》的爬虫介绍篇。

1. 爬取思路

在观察了豆瓣每个影片的链接地址后,写下了主要思路:
(1)在豆瓣电影的选片页面,筛选所有华语(即中国大陆、香港、台湾)的影片,并获取其id;
(2)通过id构建并爬取该影片链接,获得其导演、主演、类型、片长、评分等信息。

2. 爬取分析

那这个思路能否实现呢?我们可以打开chrome,打开豆瓣影视筛选的页面,筛选电影、中国大陆。首先查看网页源代码,可以发现这个页面是JavaScript实现的动态页面。如果直接用requests等库来抓取原页面,是无法获得数据的。那接着分析网页后台向接口发送的请求,看是否有Ajax请求。键盘快捷键f12调出开发者工具,选择Network,重新刷新页面,在Fillter输入框下面的筛选中选择XHR,筛选出Ajax请求。可以发现有个new_search_subject开头的请求,点击Preview的选项,发现这就是页面上显示的影片信息。双击该请求,查看具体的数据。
爬虫思路-1
可以看到页面数据是JSON格式,且没有加密,适合通过模拟Ajax请求来获取数据。下面分析该请求的参数:
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&countries=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86

sort是排序方式,range是评分数范围,tags、countries是筛选的参数,而start是控制页面的参数。每个页面有20部电影,每部电影有标题、id等信息。页数从0开始,每隔20整体变化一次。不过看不到最大的页数,只能先尝试大的数字,看最多能到多少页。大致看下,中国大陆、香港目前最大是9960,台湾是6500。

获取id解决了,接着来看单个页面,比如https://movie.douban.com/subject/26752088/。
爬虫思路-2
页面中方框圈出的信息,是我爬取的信息。在Elements观察了多个页面后,可以发现除了制片国家/地区和语言这两项需要用正则解析外,其他都可以用xpath解析。最后将这些信息存入数据库即可。

3. 实现过程

使用scrapy框架爬取和MongoDB数据库存储数据。

3.1 准备工作

确保已经安装Redis和MongoDB数据库并启动服务,另外python中还需要安装aiohttp、requests、pyquery、Flask、pymongo、Scrapy等库。

3.2 具体实现

3.2.1 页面解析

使用scrapy自带的数据提取方法,即Selector,对页面进行解析。Selector是基于lxml来构建的,支持XPath选择器、CSS选择器以及正则表达式,解析速度和准确度都非常高。电影详细页面信息解析中,用到XPath选择器和正则表达式。

3.2.2 数据存储

使用redis数据库存储proxy数据,MongoDB数据库存储电影数据。

3.2.3 反反爬虫策略

为了防止被ban,设置了以下方法:
(1) 随机User Agent (middleware.py中的RandomUserAgentMiddleware)
(2) 使用代理池,随机IP(ProxyPool,middleware.py中的ProxyMiddleware)
(3) 禁用cookie(settings.py中,COOKIES_ENABLED = False

3.2.4 提高速度

(1)使用付费代理
网上有很多免费代理,但ip质量很低,大部分都不可用。为了提高proxy可用率,避免冗余,只使用付费代理。先通过代理池对ip进行初步筛选,剔除不可用代理。然后用WEB API的形式暴露可用代理,在爬取过程中,通过访问接口获取一个随机可用代理。

(2)settings.py设置

  • 因为已经有随机UA和随机IP的防ban措施,因此可以将下载延迟设置为0:DOWNLOAD_DELAY = 0
  • scrapy网络请求是基于Twisted,Twisted默认支持多线程,而且scrapy默认也是通过多线程请求的,并且支持多核CPU的并发,通过一些设置提高scrapy的并发数:
    CONCURRENT_REQUESTS = 100
    CONCURRENT_REQUESTS_PER_DOMAIN = 100
    CONCURRENT_REQUESTS_PER_IP = 100
  • 设置下载超时时间:DOWNLOAD_TIMEOUT=30

3.2.5 具体代码

具体代码放在我的github上:douban-spider

4. 爬取结果

总共爬取电影33133部,存在Mongo的数据格式如下:

{"_id" : ObjectId("5bb96351fd21815bdbe90124"),"id" : "24719063","title" : "烈日灼心","year" : "2015","region" : [ "中国大陆"],"language" : [ "汉语普通话"],"director" : [ "曹保平"],"type" : [ "剧情", "悬疑", "犯罪"],"actor" : [ "邓超", "段奕宏", "郭涛", "王珞丹", "吕颂贤", "高虎", "白柳汐", "杜志国"],"date" : [ "2015-08-27(中国大陆)", "2015-06-15(上海电影节)"],"runtime" : [ "139分钟"],"rate" : "7.9","rating_num" : "290209"
}

5. 后记

接下来会对刚刚爬取这33133部电影数据进行清洗并分析。
后续分析文章请见:数据分析(一)豆瓣华语电影分析

该文同时发表于『运筹OR帷幄』公众号,大家也可前往公众号查看,《用数据带你了解电影行业—华语篇》

6. reference

  • 《Python3网络爬虫开发实战》

本文同步发布在我的个人博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音之家SOTA|TIOBE 场景测试:华语大学生辩论赛

SpeechIO TIOBE Benchmark 场景测试:华语大学生辩论赛 场景:华语大学生辩论赛 1、素材来源 YouTube 爬取,华语大学生辩论世界杯,现场视频,原始时长约2小时。 2、场景特点 环境 辩论赛现场,室内场馆会场&…

Python批量爬取华语天王巨星周杰伦的音乐

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 小伙伴说想听周杰伦的音乐&#xff…

华语乐坛到底姓什么?------酷狗篇

爬取页面展示 热门榜单——酷狗top500: https://www.kugou.com/yy/rank/home/1-8888.html?fromrank 特色榜单——影视金曲榜: https://www.kugou.com/yy/rank/home/1-33163.html?fromrank 项目分析 对于酷狗top500: 打开network发现酷狗并没有将榜单封装在json里面&#x…

华语电影

转载于:https://www.cnblogs.com/yymn/p/4512893.html

华为eSpace7910话机通讯录配置

1.登录话机IP。默认账号 admin/admin123 2.在左侧导航栏选择高级——服务——通讯录服务器 3.点击通讯录服务器选择LADP 4.按照下图设置LADP选项 LDAP服务器:172.16.237.1 LDAP端口:389 根节点:oucontacts,ouGD,ouAH,dcXXXX,dccom 账号:域…

华为产品测评官-开发者之声 - 产品体验

目录 活动介绍产品体验过程以及感受实战经验(具体的操作步骤和结果) 活动介绍 本期活动有机会使用并评估华为多个产品,包括华为云CodeArts,华为云ModelArts,鲲鹏DevKit,昇腾CANN,昇思MindSpore。无论您是初…

华为语音合成服务,为用户提供实时、可替换、多音调的语音播放体验

在不能操作手机或总盯着手机看的情况下,如何及时获取资讯信息、方便阅读呢?用耳朵听不失为一种好方法。华为机器学习服务的语音合成服务,采用深度神经网络技术,提供高度拟人、流畅自然的语音合成服务。开发者可以在小说阅读、智能…

基于OpenHarmony开发的语音小助手

基于OpenHarmony开发的语音小助手 本教程将演示如何在BearPi-HM_Nano开发板上使用GPIO输入功能去读取语音模块信息,实现****开关灯自由****!! 一、实验前器材准备 语音识别模块 语音播放模块 SD卡 无源喇叭 BearPi-HM_Nano开发板 E53—SC1…

带语音通话功能的华为ME909s-821a使用方法

关键词:华为 HUAWEI ME909s 821a V2 语音 Codec 正文:不少用户反馈,希望华为ME909s-821a模块能带上语音通话功能,其实821a模块引出了PCM数字音频接口,我们只需要外挂一个PCM codec即可实现语音通话功能。但是考虑…

调用华为API实现中文语音识别

目录 1. 作者介绍2. 华为云中文语音识别2.1 录音文件识别与获取2.2 限制要求2.3 对象存储服务(OBS)简介 3. 实验过程以及结果3.1获得API3.2 代码实现3.3 运行结果 参考(可供参考的链接和引用文献) 1. 作者介绍 张楠,女…

chatgpt赋能python:Python处理Word文件的优秀方案

Python处理Word文件的优秀方案 如今,Word文档在生活中变得越来越普遍,不仅在学校或办公室中使用,而且也在日常生活中,像编辑简历、写作业、撰写文档和工作报告等方面也十分常见。因此,学习如何使用Python处理Word文件…

期待文心一言体验号

期待百度文心一言的体验号,用好chatGPT首先要问自己想要什么,该怎么问才能高效拿到想要的目标结果。遇弱则弱,遇强则强,遇到正能量就能传递正能量! 谁有文心一言体验地址麻烦提供一下,交流一下: 下方是回复…

ChatGPT时代:数据标注会成为一种人机交互“语言”么?

标注猿的第70篇原创 一个用数据视角看AI世界的标注猿 大家好,我是AI数据标注猿刘吉,一个用数据视角看AI世界的标注猿。 从去年的10月份到现在有半年的时间没有更新了,去年没有更新是疫情的原因,今年没有更新主要有两个原因一…

Plus 版 Chatgpt,和任何的 PDF 聊天! #Chatpdf

Chatgpt 的出现,颠覆了整个内容生产行业的同时,也极大地提高了很多文字工作者的效率。 于是一时之间,各大公司都在争先推出自己的聊天机器人,希望在这个新兴而庞大的市场分一杯羹。‍‍‍‍‍‍‍‍ 于是 Chatpdf 出现了&#xff…

大厂程序员手把手教你如何写简历(附简历模板)

代码随想录刷题网站上线咯:programmercarl.com,200道力扣题目刷题顺序,详细题解,支持C、Java、Python、Go、JS等多语言版本,一个你只要发现,就会收藏的硬核算法学习网站。 文章目录 简历基调谨慎使用精通两…

ChatGPT做的简历戳中HR心巴,小伙刚毕业就拿下梦想offer!

西风 发自 凹非寺量子位 | 公众号 QbitAI 鹅妹子嘤,最近一位毕业生用ChatGPT生成的求职信,分分钟躲过简历筛选算法。 然后,自己梦寐以求的工作就真的到手了! 这位用ChatGPT帮忙找工作的小伙表示: 三月份以来写所有东西…

软件测试个人求职简历该怎么写,模板在这里

目录 1、个人资料 2、专业技能 3、工作经验 4、项目经验 5、教育背景 1、个人资料 姓 名:xxx 性 别:x 手机号码:138888888xx 邮 箱: xxx 学 历:本科 专 业:电子商务 英 语:四级 当前工作…

程序员简历应该怎么写?

说到程序员简历,这两个月,我看过不下10,000份简历。。。 答主不是HR,也不是技术负责人,但是在网站的运营工作中,每天最开心的事情就是研究候选人的简历了~~ 这些人中,有BAT的资深大牛程序员,也有…

建议这样使用ChatGPT,让你成为更好的开发者

这样使用ChatGPT,让你成为更好的开发者 作为开发人员,您的责任之一是不断学习和提高您的技能。ChatGPT 是一个强大的工具,可以通过多种方式帮助您成为更好的开发人员。如果你不知道什么是 ChatGPT,它是 OpenAI 开发的一种大型语言…

大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍

紧急提醒:还有1天! 2020.NET开发者大会就要开幕啦! 你都做好参会准备没有? 特殊时期,为方便小伙伴们顺利参会,小编特意整理了这篇大会参会攻略,大到各种日程安排、小到签到、出行、防疫等&#…