3、scrapy基本概念介绍

来源:互联网 发布:手机淘宝不能追加评论 编辑:程序博客网 时间:2024/05/17 22:58

本篇介绍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 scrapyclass Product(scrapy.Item):    name = scrapy.Field()    price = scrapy.Field()    stock = scrapy.Field()

Item Pipeline

作用
  1. 清洗HTML数据
  2. 验证抓取到的数据(检查是否有数据)
  3. 检查是否重复(然后丢弃重复数据)
  4. 存储数据到数据库中
示例
from scrapy.exceptions import DropItemclass 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 0
原创粉丝点击