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 = 1.15

    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': 300
}

优先级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
  1. 其他成员
  • url
  • status
  • headers
  • body
  • resquest
  • meta
  • flags
  • copy()
  • replace()
  • urljoin(url)
  1. 子类
  • scrapy.http.TextResponse(它有两个子类)
  • scrapy.http.HtmlResponse
  • scrapy.http.XmlResponse
    原文作者:ifeelok0319
    原文地址: https://www.jianshu.com/p/48d8ce66982e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞