天天看点

3、scrapy基本概念介绍

本篇介绍scrapy的命令行工具、重要组件和重要对象。

scrapy 命令行工具

  • help:帮助信息(scrapy –help)
  • version:版本信息,可以添加-v查看scrapy各个组件的信息(scrapy version -v)
  • startproject:新建一个工程(scrapy startproject example)
  • genspider:产生一个spider(scrapy genspider example example.com)
  • list:查看本工程中包含的spiders
  • view:在浏览器中打开网页,这个网页就是scrapy处理的网页(scrapy view http://example.com)
  • parse:解析一个URL(使用对应的spider),打印结果
  • shell:可交互的scrapy爬取控制台
  • runspider:运行一个自包含的爬虫,即没有创建工程
  • bench:基准测试

scrapy的重要组件

Spider

基本介绍

Spider是一个类,它定义了怎样爬取一个网站,包括怎样跟踪链接、怎样提取数据。

执行流程:

- 根据start_urls产生初始Requests

- 解析responce

- 使用selector

- 存储items

zaobao Spider

3、scrapy基本概念介绍

基类介绍(scrapy.Spider)

  • 属性
    • name:spider的名称,同一工程中唯一
    • allowed_domains:允许的域名
    • start_urls:初始urls
    • custom_settings:个性化设置,覆盖全局设置(settings.py)
    • crawler:抓取器,spider将绑定到它上面
    • settings:配置实例,包含工程中所有的配置变量
    • logger:日志实例
  • 方法
    • from_crawler(crawler, *args, **kwargs):类方法,用于创建spiders
    • start_requests():生成初始的requests
    • make_requests_from_url(url):根据url生成一个request
    • parse(response):解析网页内容
    • log(message[, level, component]):兼容老版本
    • self.logger.info(“log内容”)
    • closed(reason):当spider关闭的时候调用的方法
子类介绍

CrawlerSpider

  • 最常用的spider,用于抓取普通网页
  • 和基类比较增加了两个成员
    • rules:定义了一些抓取规则(链接怎么跟踪、使用哪一个parse函数解析此链接)
    • parse_start_url(response):解析初始url产生的response

示例

3、scrapy基本概念介绍

XMLFeedSpider CSVFeedSpider SitemapSpider

Selector

scrapy默认使用Selector作为网页解析工具

实例化
3、scrapy基本概念介绍
常用方法
  1. xpath
  2. css
  3. re
  4. extract
  5. extract_first

Item

示例

import scrapy


class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
           

Item Pipeline

作用
  1. 清洗HTML数据
  2. 验证抓取到的数据(检查是否有数据)
  3. 检查是否重复(然后丢弃重复数据)
  4. 存储数据到数据库中
示例
from scrapy.exceptions import DropItem


class PricePipeline(object):
    vat_factor = 

    def process_item(self, item, spider):
        if item['price']:
            if item['price_excludes_vat']:
                item['price'] = item['price'] * self.vat_factor
                return item
        else:
            raise DropItem("Missing price in %s" % item)
           
激活pipeline

settings.py

里面设置

ITEM_PIPELINES = {
    'myproject.pipelines.PricePipeline': 
}
           

优先级0-1000,越小越优先

Feed exports

存储抓取到的数据

  • json
  • json lines
  • csv
  • xml

scrapy的重要对象

Request

  • scrapy.http.Request的初始化参数
    • url:必须
    • callback
    • method=‘GET’
    • headers
    • body
    • cookies
    • meta
    • encoding=’utf-8’
    • priority=0
    • don’t_filter=False
    • errback
  • 其它属性
    • url
    • method
    • headers
    • body
    • cookies
    • meta
    • copy()
    • replace()

示例

3、scrapy基本概念介绍

- 子类

FormRequest实现登陆功能

class scrapy.http.FormRequest(url[, formdata…])

示例

3、scrapy基本概念介绍

Response

  1. scrapy.http.Response的初始化参数
    • url:必须参数
    • status=200
    • headers
    • body
    • flags
  2. 其他成员
    • url
    • status
    • headers
    • body
    • resquest
    • meta
    • flags
    • copy()
    • replace()
    • urljoin(url)
  3. 子类
    • scrapy.http.TextResponse(它有两个子类)
    • scrapy.http.HtmlResponse
    • scrapy.http.XmlResponse

继续阅读