摘要
通过scrapy框架爬取豆瓣top250电影,并保存为文件
1.引言
随着网络的迅速发展,互联网成为大量信息的载体。如何有效提取并利用这些信息就成为一个巨大的挑战。为了解决由此产生的一系列问题,定向抓取相关网页的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定抓取目标有选择的访问互联网网页与相关链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
本次实验使用爬虫框架scrapy爬取豆瓣top250电影的相关信息。
2.系统结构
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,有以下提示则说明安装成功。
然后在cmd中通过scrapy新建一个爬虫文件,在cmd中输入scrapy startproject douban。结果如下图所示:
新创建的爬虫文件中含有douban文件夹和scrapy.cfg文件。其中douban文件夹所含文件如下图所示:
简单介绍上述文件:
scrapy.cfg:项目的配置文件
douban/:该项目的python模块,之后的代码将在保存到该目录
douban/items.py:项目中的item文件
douban/pipeline.py:项目中的pipeline文件
douban/setting.py:项目的配置文件
douban/spiders/:放置spider代码的目录
接下来编辑items.py文件:
首先引入scrapy,然后创建一个容器类,这个类继承自scrapy.Item,用来存储爬取下来的数据的存放容器。这个容器存放电影的名字、评分、引述。
接下来在spiders文件夹下创建douban_spider.py文件并编写代码
1.从scrapy中获取通用的spider和selector。
Scrapy有一套提取数据的机制,即选择器机制(selectors),通过特定的xpath或css表达式来选择html页面中的某些元素。若不熟悉xpath,可点击前往学习。通过浏览器检查元素确定要提取的关键元素,然后通过xpath提取。selector方法返回的数据需使用extract方法来格式化。
上图标红圈的即为要提取的信息:
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文件。
打开保存的csv文件会发现execl表格中全是乱码或者部分unicode编码的字符为乱码。
在setting.py文件中加入FEED_EXPORT_ENCODING ='utf-8-sig'。然后删掉douban.csv文件再重新执行scrapy crawl douban -o douban.csv -t csv
4.实验
最终的实验结果如下图所示
5.总结和展望
通过本次作业,对于爬虫的使用有了更深的了解,在实验过程中知道了爬虫的更多应用及其强大之处。但也应知道善用爬虫,不可用于违法行为。
在今后的学习中,将加强对python的了解和使用,同时也多加练习对于爬虫的使用,并用于数据挖掘、分析。
参考文献:
[1]https://blog.csdn.net/lonesome_zxq/article/details/85049784