scrapy爬取豆瓣电影

摘要

通过scrapy框架爬取豆瓣top250电影,并保存为文件

1.引言

随着网络的迅速发展,互联网成为大量信息的载体。如何有效提取并利用这些信息就成为一个巨大的挑战。为了解决由此产生的一系列问题,定向抓取相关网页的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定抓取目标有选择的访问互联网网页与相关链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

本次实验使用爬虫框架scrapy爬取豆瓣top250电影的相关信息。

2.系统结构

图2-1

Scrapy Engine:引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。

Scheduler(调度器):调度器从引擎接受request并将它们入队,以便之后引擎请求时提供给引擎。

Downloader(下载器):下载器负责获取页面数据并提供给引擎,而后提供给Spider。

Spiders:Spider是Scrapy用户编写用于分析response并提起item(即获取到的item)或额外跟进的url的类。每个spider负责处理一个特定(或一些)网站。

Item Pipeline:Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、验证及持久化。

Dowmloader middlewares(下载器中间件):下载器中间件是在引擎及下载器之间的特定钩子,处理Downloader传递给引擎的response。提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

Spider middlewares(Spider中间件):Spider中间件是在引擎及Spider之间的特定钩子,处理spider的输入(response)和输出(item、requests)。提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。

3.实现代码

首先确保电脑上已经安装好了scrapy。在cmd中输入scrapy,有以下提示则说明安装成功。

图3-1

然后在cmd中通过scrapy新建一个爬虫文件,在cmd中输入scrapy startproject douban。结果如下图所示:

图3-2

新创建的爬虫文件中含有douban文件夹和scrapy.cfg文件。其中douban文件夹所含文件如下图所示:

图3-3

简单介绍上述文件:

scrapy.cfg:项目的配置文件

douban/:该项目的python模块,之后的代码将在保存到该目录

douban/items.py:项目中的item文件

douban/pipeline.py:项目中的pipeline文件

douban/setting.py:项目的配置文件

douban/spiders/:放置spider代码的目录

接下来编辑items.py文件:

图3-4

首先引入scrapy,然后创建一个容器类,这个类继承自scrapy.Item,用来存储爬取下来的数据的存放容器。这个容器存放电影的名字、评分、引述。

接下来在spiders文件夹下创建douban_spider.py文件并编写代码

图3-5

1.从scrapy中获取通用的spider和selector。

Scrapy有一套提取数据的机制,即选择器机制(selectors),通过特定的xpath或css表达式来选择html页面中的某些元素。若不熟悉xpath,可点击前往学习。通过浏览器检查元素确定要提取的关键元素,然后通过xpath提取。selector方法返回的数据需使用extract方法来格式化。

图3-6

上图标红圈的即为要提取的信息:

movie_name = movie.xpath(‘div[@class=”hd”]/a/span/text()’).extract()

movie_star = movie.xpath(‘div[@class=”bd”]/div[@class=”star”]/span[@class=”rating_num”]/text()’).extract()

movie_quote= movie.xpath('div[@class=”bd”]/p[@class=”quote”]/span[@class=”inq”]/text()’).extract()


2.接着使用item对象将爬取的数据返回

上图使用了item对象,item对象是自定义的python字典,里面的字段为我们在items.py文件中定义的属性,spider会将爬取到的数据以iten对象返回。


3.创建DouBanSpider,继承scrapt.Spider类,且定义有以下三个属性:

name:用于区别各个spider,该名称必须唯一

start_urls:包含了spider在启动时进行爬取的url列表

parse:用于处理解析生成的response对象,提取数据以及生成需要进一步处理的url的request对象

以上三项不可缺少

提取保存完一页的数据后再通过selector提取下一页的链接然后通过Request通过回调函数调用parse方法接着请求下一页的数据并保存。

然后在setting.py文件中添加如下设置

USER_AGENT ='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/61.0.3163.100 Safari/537.36'


以上步骤完成后在cmd中输入scrapy crawl douban -o douban.csv -t csv。

scrapy会把爬取保存下来的数据保存为csv文件。

图3-7

打开保存的csv文件会发现execl表格中全是乱码或者部分unicode编码的字符为乱码。

图3-8

在setting.py文件中加入FEED_EXPORT_ENCODING ='utf-8-sig'。然后删掉douban.csv文件再重新执行scrapy crawl douban -o douban.csv -t csv

4.实验

最终的实验结果如下图所示

图3-9

5.总结和展望

通过本次作业,对于爬虫的使用有了更深的了解,在实验过程中知道了爬虫的更多应用及其强大之处。但也应知道善用爬虫,不可用于违法行为。

在今后的学习中,将加强对python的了解和使用,同时也多加练习对于爬虫的使用,并用于数据挖掘、分析。


参考文献:

[1]https://blog.csdn.net/lonesome_zxq/article/details/85049784

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351