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

这里写图片描述

基类介绍(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

示例

这里写图片描述

XMLFeedSpider
CSVFeedSpider
SitemapSpider
Selector

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

实例化

这里写图片描述

常用方法
  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()

示例

这里写图片描述
- 子类
FormRequest实现登陆功能

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

示例

这里写图片描述

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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值