python爬虫入门(3)----- scrapy

scrapy

简介

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

spiders

Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
import scrapy

class FaiscoSpider(scrapy.Spider):
    name = 'faisco'#spider的名称
    allowed_domains = ['www.faisco.cn']#允许爬取的域名
    start_urls = ['https://www.faisco.cn']#开始爬取的url
    
    #编写你的爬取代码
    def parse(self, response):
        pass

items

Item 对象是种简单的容器,保存了爬取到得数据。 其提供了 类似于词典(dictionary-like) 的API以及用于声明可用字段的简单语法。

import scrapy

class template(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    img = scrapy.Field()

pipelines

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。

每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。

class FaiscoPipeline(object):
    #spider启动时调用
    def open_spider(self, spider):
        pass
    
    #spider关闭时调用
    def close_spider(self, spider):
        pass        
    
    #每个item pipeline组件都需要调用该方法,这个方法必须返回一个 Item (或任何继承类)对象, 或是抛出 DropItem 异常,被丢弃的item将不会被之后的pipeline组件所处理。
    def process_item(self, item, spider):
        return item

middlewares

middleware分为download middleware和spider middleware

  1. download middleware

     class scrapy.downloadermiddlewares.DownloaderMiddleware
    
         def process_request(request, spider)
         当每个request通过下载中间件时,该方法被调用。
         process_request() 必须返回其中之一: 返回 None 、返回一个 Response 对象、返回一个 Request 对象或raise IgnoreRequest 。
    
         def process_response(request, response, spider)
         process_response() 必须返回以下之一: 返回一个 Response 对象、 返回一个 Request 对象或raise一个 IgnoreRequest 异常。
    
         def process_exception(request, exception, spider)
         当下载处理器(download handler)或 process_request() (下载中间件)抛出异常(包括 IgnoreRequest 异常)时, Scrapy调用 process_exception() 。
         process_exception() 应该返回以下之一: 返回 None 、 一个 Response 对象、或者一个 Request 对象。
  2. spider middleware

     class scrapy.contrib.spidermiddleware.SpiderMiddleware
         def process_spider_input(response, spider)
         当response通过spider中间件时,该方法被调用,处理该response。
         process_spider_input() 应该返回 None 或者抛出一个异常。
    
         def process_spider_output(response, result, spider)
         当Spider处理response返回result时,该方法被调用。
    
         def process_spider_exception(response, exception, spider)
         当spider或(其他spider中间件的) process_spider_input() 跑出异常时, 该方法被调用。

settings

#项目属性
BOT_NAME = 'faisco'
SPIDER_MODULES = ['faisco.spiders']
NEWSPIDER_MODULE = 'faisco.spiders'


# 是否遵守robots协议
ROBOTSTXT_OBEY = True

# 最大并发数
#CONCURRENT_REQUESTS = 32

# 延迟,防止封号
#DOWNLOAD_DELAY = 3

# 是否使用cookie
#COOKIES_ENABLED = False

# 默认请求头,可以加上ua,防止识别为爬虫
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# 配置spider middlewares
#SPIDER_MIDDLEWARES = {
#    'faisco.middlewares.FaiscoSpiderMiddleware': 543,
#}

# 配置download middlerwares
#DOWNLOADER_MIDDLEWARES = {
#    'faisco.middlewares.FaiscoDownloaderMiddleware': 543,
#}


# 配置pipeline
#ITEM_PIPELINES = {
#    'faisco.pipelines.FaiscoPipeline': 300,
#}

# 配置日志
LOG_LEVEL = 'INFO'
LOG_FILE = log_file_path

参考文献

https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/settings.html

猜你喜欢

转载自www.cnblogs.com/wuweishuo/p/10606133.html