scrapy简单介绍,以及使用scrapy爬豆瓣音乐

scrapy简单介绍,以及使用scrapy爬豆瓣音乐

基本概念介绍

Spider

Spider定义了网站是如何被扒取的,通过Spider可以决定哪些url可以被扒,决定解析response中的哪些数据。

Spider大致工作流程:

  1. 通过start_requests()方法执行第一个请求,可以不自定义start_requests方法,默认的实现是通过make_requests_from_url对start_urls中url生成request,并默认回调parse方法。
  2. 在回调方法里,通过xpath selector(或其他方式)解析html数据。回调方法返回Item对象或者request对象,或者两者的迭代。
  3. 最后,Item对象可以通过Item Pipeline存储到数据库,或者通过Feed exports导出为json或cvs等文件上。

Selectors

Selector用于从原始的html数据中提取出我们想要的数据。基于XPath和CSS表达式实现,可以通过response.XPath和response.CSS得到Selector对象(列表)。

Selector有4个基本方法

  • xpath(xPathexpression):根据XPath规则返回Selector对象列表
  • css(CSSexpression):根据CSS规则返回Selector对象列表
  • extract():返回unicode字符串内容
  • re():根据正则表达式,返回符合要求的unicode字符串

item

item用于存储扒下来的数据,类似于django中的model,但它更简单-只有一种field。scrapy还为item提供了跟操作字典一样的接口,因此你可以像操作dict那样操作item。

item pipeline

  • 净化html数据
  • 验证item的有效性,无效则返回DropItem忽略不处理
  • 检查是否重复爬取了
  • 把item存入数据库
  • 把item导出到csv/xml。。。通过与ItemExport配合

Downloader Middleware

非常类似于django的Middleware,适合想在request前和收到response后做些处理。

scrapy内置交互环境

在终端中通过执行scrapy shell http://www.douban.com指令可以进入到scrapy的交互界面,用dir()可以看到内置变量,通过它们可以进行我们想要的操作,比如通过sel我们可以进行xpath提出元素。

 

例子:爬取豆瓣音乐

创建项目

创建Item

item.py

创建Spider

创建pipline:将数据存储到csv文件

加入一个middleware用于记录日志

settings.py

在settings.py上配置middleware和pipline,以及反爬虫策略。

运行

cd到项目主目录,执行命令