引用
Scrapy 官方教程
一,概述
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以使用于包括数据挖掘,信息处理和存储历史数据等一系列的程序中
最初是为了页面抓取(网络抓取)所设计的,也可以应用在获取API所返回的数据或者通用的网络爬虫
二,入门指南
教程将完成下列任务:
1,创建一个Scrapy
项目;
2,定义提取的Item
3,编写爬取网站的spider
并且提取Item(即数据)
4,编写Item Pipeline
来存储提取到的Item
1,安装
Ubuntu
下,pip install Scrapy
2,创建项目
在爬取之前,需要创建一个新的Scrapy项目
scrapy startproject tutorial
产生的tutorial
目录如下
文件功能:
scrapy.cfg
项目的配置文件
tutorial
项目的python 模块,之后将在此目录下添加代码
tutorial/items.py
项目中的item文件
tutorial/pipelines.py
项目中的pipelines文件
tutorial/settings
项目中的设置文件
tutorial/spiders
放置spider代码的目录
3,定义Item
Item是保存爬取到的数据的容器,使用方法和Python字典类似,并且提供了额外的保护机制来避免拼写错误导致的未定义字段错误
类似在ORM中做的一样,可以通过创建一个scrapy.Item
类,并且定义类型为scrapy.Field
的类
属性来定义一个Item
首先根据需要从dmoz.org获取到的数据对item进行建模
需要从dmoz中获取名字,url,和网站的描述
在item中定义相应的字段,编辑tutorial
目录中的items.py
文件
一开始看起来可能有些复杂,但是通过定义item, 可以很方便的使用Scrapy的其他方法,这些方法需要知道item的定义
3,编写第一个Spider
Spider是用户编写的用于从单个网站或者一些网站爬取数据的类
包含了一个用于下载的初始URL,
如何跟进网页中的链接和如何分析页面中的内容,提取生成Item的方法
为了创建一个Spider,必须继承scrapy.Spider类,并且定义下面的三个属性:
name
用于区别不同的Spider,该名字必须是唯一的
start_urls
包含了Spider在启动时候进行爬取的url列表,因此,第一个被获取到的页面将是其中之一
后续的URL则从初始的URL获取到的数据中提取
parse()
是spider的一个方法,被调用的时候,每个初始URL完成下载后生成的Reponse
对象将会作为唯一的参数传递给该函数,该方法负责解析返回的数据response data
提取数据(生成item)和生成需要进一步处理的URL的Request
对象
上面是第一个Spider代码,保存在tutorial/spiders
目录下的dmoz_spider.py
文件中
3.1 爬取
进入项目tutorial
的根目录,执行命令启动spider
scrapy crawl dmoz
, dmoz
来自类中的name
crawl dmoz 启动用于爬取,得到两个文件Books, Resources
Scrapy 为Spider的start_urls
属性中的每个URL创建了一个scrapy.Request
对象,并且将
parse方法作为回调函数赋值给了Request
Request对象经过调用,执行生成scrapy.http.Response
对象并且送回给spider的parse()
方法
3.2 提取Item
Selectors 选择器简介
从网页中提取数据有很多的方法,Scrapy 使用了一种基于Xpath和Css表达式机制-Scrapy Selectors
Xpath基本例子:
/html/head/title
选择Html文档中的head标签内的title元素
/html/head/title/text()
选择上面元素中的文字
//td
选择所有的td元素
//div[@class="mini"]
选择所有具有class="mine"
属性的div元素
为了配合使用Xpath,Scrapy 提供了Selector之外,还提供了方法避免每次从response中提取数据时生成selector的麻烦
Selector有四个基本的方法
xpath(),传入xpath表达式,返回该表达式所对应的所有节点的selector list列表
css(), 出入css表达式,返回该表达式所对应的所有节点的selector list
extract(),序列化该节点为unicode字符串并且返回list
re(),根据传入的正则表达式对数据进行提取,返回unicode字符串列表