<返回更多

Scrapy框架初探

2020-07-07    
加入收藏

Scrapy基本介绍

scrapy是一种用于爬虫的框架,并提供了相当成熟的模板,大大减少了程序员在编写爬虫时的劳动需要。

Command line tool & Project structure

使用scrapy需要先创建scrapy project,之后再于project文件夹路径下生成spider(爬虫)文件,编写完程序后,再运行爬虫(手动指定保存文件)。以上过程由命令行执行,具体如下:

  1. scrapy startproject <myproject>
  2. scrapy genspider <spider_name> <domain>
  3. scrapy crawl <spider_name> [-o filename]

后面两个命令均要在myproject文件夹(第一个myproject)路径下执行。而由第一个命令创建的scrapy项目结构如下:

myproject/
    scrapy.cfg
    myproject/
        __init__.py
        items.py
        middlewares.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            spider_name.py

Scrapy Overview

Scrapy框架初探

 

上图是scrapy的基本结构,易见scrapy的程序执行和数据流动是由 engine 来调度控制的,关于该结构的具体解释见: scrapy document overview .

Scrapy Spider详解

基础的使用scrapy一般只需要在spider_name.py中进行编写,该文件是我们使用scrapy genspider <spider_name>命令后自动创建中,文件中还自动import了scrapy并且还自动创建了一个模版spider类(自动继承自scrapy.Spider)。spider的功能简介于此: scrapy document spider 。这里介绍一些常用的scray.Spider类的属性及方法:

Attribute :

name :name属性即是我们使用命令行时所指定的spider_name,这是scrapy框架中用于标识spider所用,每个spider都必须有一个独一无二的name。

allowed_domains :该属性为一个以string为元素的list,每个元素string为一个domain,限定爬虫所能爬取的网址。

start_urls :该属性同样为一个以string为元素的list,每个元素string对应一个完整的url,是spider开始时需要爬取的初始网址。

custom_settings :该属性的形式为一个dict,即如修改user-agent,开启pipeline,指定log_level之类的,并且局限于http header。

method :

start_requests :该方法用于在scrapy开始爬虫时以start_urls返回一个Request iterable或者一个generator,该方法在一次爬虫过程中仅被调用一次。其默认实现为:Request(url, dont_filter=True) for each url in start_urls。

parse :这是spider类中最重要的一个方法。由scrapy文档中对spider的介绍,spider每发出一个Request,便要对该Request的Response进行处理,处理的函数称为callback function,即 one Request corresponds to one Callback。而parse就是默认的callback函数,它负责对传回的response进行解析(xpath),提取数据(item dict-like object)并交予,并且还会根据需要发出新的Request请求。和start_requests一样,它的返回值也需要是一个iterable或是一个generator。一般来说,先yield item,再根据对response的解析得到新的url与yield Request(url,callback)。这里对于response的解析和数据提取交予过程略过,具体可以见于 b站教程 。

由以上介绍可见对于start_request和parse方法的返回值要求,scrapy框架的内部代码逻辑应该是像for循环一样轮询两者的返回值,对于parse方法还需要判断其返回值的类型(item/Request)来区别处理。

Scrapy Request and Response

Typically, Request objects are generated in the spiders and pass across the system until they reach the Downloader, which executes the request and returns a Response object which travels back to the spider that issued the request.

Request object

scrapy.Request(url,callback,method="GET",headers=None,body=None,cookies=None,meta=None,..,dont_filter=False)

Response obejct

这里仅介绍一些reponse对象的属性:

Settings

Settings can be populated using different mechanisms, each of which having a different precedence. Here is the list of them in decreasing order of precedence:

  1. Command line options (most precedence)
  2. Settings per-spider
  3. Project settings module(settings.py)
  4. Default settings per-command
  5. Default global settings (less precedence)

一般我们直接在settings.py文件中对其进行修改,常见需要增改的有:user-agent指定,ITEM_PIPELINES解除注释以开启pipeline功能,LOG_LEVEL和LOG_FILE指定,ROBOTSTXT_OBEY设为False等等。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>