Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或处理历史数据等一系列的程序中。
猫眼电影信息爬取
在开始爬取之前,我们需要创建一个新的Scrapy项目。进入打算存储代码的目录中,运行下列命令:
1 | scrapy startproject maoyan |
该命令将会创建包含下列内容的tutorial目录:
1 | maoyan/ |
定义Item
Item是保存爬取到的数据的容器,其使用方法和python字典类似,并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。
编辑maoyan目录中的items.py文件:
1 | import scrapy |
编写爬虫(Spider)
定义以下三个属性:
name:用于区别Spider。该名字必须是唯一的,不可以为不同的Spider设定相同的名字
start_urls:包含了Spider在启动时进行爬取的url列表。因此,第一个被获取到的页面将是其中之一。后续的URL则从初始的URL获取到的数据中提取
parse_item():Spider的一个方法
这里继承的爬虫为CrawlSpider。对比Spider继承过来的属性外,提供了一个新的属性:
rules
一个包含一个(或多个)Rule对象的集合(list)。每个Rule对爬取网站的动作定义了特定表现。如果多个rule匹配了相同的链接,则根据他们在本属性中被定义的顺序,第一个会被使用。
1 | class scrapy.contrib.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None) |
link_extractor
是一个 Link Extractor 对象。 其定义了如何从爬取到的页面提取链接。callback
是一个callable或string(该spider中同名的函数将会被调用)。 从link_extractor中每获取到链接时将会调用该函数。该回调函数接受一个response作为其第一个参数, 并返回一个包含Item
以及(或)Request
对象(或者这两者的子类)的列表(list)。
警告
当编写爬虫规则时,请避免使用
parse
作为回调函数。 由于CrawlSpider
使用parse
方法来实现其逻辑,如果 您覆盖了parse
方法,crawl spider 将会运行失败。
编辑spiders文件中的maoyanSpider.py文件:
1 | import scrapy |
将数据存入MongoDB
我们可以通过pymongo连接MongoDB数据库进行操作
编辑pipelines.py:
1 | import pymongo |
修改配置
由于猫眼电影引入了反爬虫机制,我们需要修改setting中的设置。例如,加入延迟、修改代理等。
编辑 settings.py:
1 | BOT_NAME = 'maoyan' |
爬取
完成所有配置之后,进入项目的根目录,执行下列命令启动spider:
1 | scrapy crawl maoyan |
资源
由于猫眼电影上的评分和票房均加密,爬取下来的数据为生僻字。前排感谢zmj研究了破解的方法,我们小组的代码已经给出——github链接。