scrapy 教程

引用
Scrapy 官方教程

一,概述

Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以使用于包括数据挖掘,信息处理和存储历史数据等一系列的程序中
最初是为了页面抓取(网络抓取)所设计的,也可以应用在获取API所返回的数据或者通用的网络爬虫

二,入门指南

教程将完成下列任务:
1,创建一个Scrapy项目;
2,定义提取的Item
3,编写爬取网站的spider并且提取Item(即数据)
4,编写Item Pipeline来存储提取到的Item

1,安装

Ubuntu下,pip install Scrapy

2,创建项目

在爬取之前,需要创建一个新的Scrapy项目
scrapy startproject tutorial

《scrapy 教程》

产生的tutorial目录如下

《scrapy 教程》

文件功能:
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文件

《scrapy 教程》

一开始看起来可能有些复杂,但是通过定义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对象

《scrapy 教程》

上面是第一个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字符串列表

    原文作者:一曲广陵散
    原文地址: https://www.jianshu.com/p/6180068a5d50
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞