图片 20

scrapy的简单使用以及相关设置属性的介绍

Settings

Scrapy设定(settings)提供了定制Scrapy组件的方法。您可以控制包括核心(core),插件(extension),pipeline及spider组件。

设定为代码提供了提取以key-value映射的配置值的的全局命名空间(namespace)。
设定可以通过下面介绍的多种机制进行设置。

设定(settings)同时也是选择当前激活的Scrapy项目的方法(如果您有多个的话)。

Scrapy设定(settings)提供了定制Scrapy组件的方法。你可以控制包括核心(core),插件(extension),pipeline及spider组件。设定为代码提供了提取以key-value映射的配置值的的全局命名空间(namespace)。

  1. 楔子(一个最简单的案例)

获取设定值(Populating the settings)

设定可以通过多种方式设置,每个方式具有不同的优先级。
下面以优先级降序的方式给出方式列表:

命令行选项(Command line Options)(最高优先级)

  • 每个spider的设定

  • 项目设定模块(Project settings module)

  • 命令默认设定模块(Default settings per-command)

  • 全局默认设定(Default global settings) (最低优先级)

Scrapy内置设置

下面给出scrapy提供的常用内置设置列表,你可以在settings.py文件里面修改这些设置,以应用或者禁用这些设置项。

  • BOT_NAME
    默认: ‘scrapybot’
    Scrapy项目实现的bot的名字。用来构造默认
    User-Agent,同时也用来log。
    当你使用 startproject 命令创建项目时其也被自动赋值。
  • CONCURRENT_ITEMS
    默认: 100
    Item Processor(即 Item Pipeline)
    同时处理(每个response的)item的最大值
  • CONCURRENT_REQUESTS
    默认: 16
    Scrapy downloader 并发请求(concurrent requests)的最大值。
  • CONCURRENT_REQUESTS_PER_DOMAIN
    默认: 8
    对单个网站进行并发请求的最大值。
  • CONCURRENT_REQUESTS_PER_IP
    默认: 0
    对单个IP进行并发请求的最大值。如果非0,则忽略
    CONCURRENT_REQUESTS_PER_DOMAIN 设定, 使用该设定。
    也就是说,并发限制将针对IP,而不是网站。
    该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP
    非0,下载延迟应用在IP而不是网站上。
  • DEFAULT_ITEM_CLASS
    默认: ‘scrapy.item.Item’
    the Scrapy shell 中实例化item使用的默认类。
  • DEFAULT_REQUEST_HEADERS
    默认:

    {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
    }
    

    Scrapy HTTP Request使用的默认header。由 DefaultHeadersMiddleware
    产生。

  • DOWNLOADER
    默认: ‘scrapy.core.downloader.Downloader’
    用于crawl的downloader.

  • DOWNLOADER_MIDDLEWARES
    默认:: {}
    保存项目中启用的下载中间件及其顺序的字典。
  • DOWNLOAD_DELAY
    默认: 0
    下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度,
    减轻服务器压力。同时也支持小数:
  • DOWNLOAD_HANDLERS
    默认: {}
    保存项目中启用的下载处理器(request downloader handler)的字典。
  • DOWNLOAD_TIMEOUT
    默认: 180
    下载器超时时间(单位: 秒)。
  • EXTENSIONS
    默认:{}
    保存项目中启用的插件及其顺序的字典。
  • ITEM_PIPELINES
    默认: {}
    保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。
    不过值(value)习惯设定在0-1000范围内。
  • ITEM_PIPELINES_BASE
    默认: {}
    保存项目中默认启用的pipeline的字典。
    永远不要在项目中修改该设定,而是修改 ITEM_PIPELINES 。
  • LOG_ENABLED
    默认: True
    是否启用logging。
  • LOG_ENCODING
    默认: ‘utf-8’
    logging使用的编码。
  • LOG_FILE
    默认: None
    logging输出的文件名。如果为None,则使用标准错误输出(standard
    error)。
  • LOG_FORMAT
    默认: ‘%(asctime)s [%(name)s] %(levelname)s: %(message)s’
    日志的数据格式
  • LOG_DATEFORMAT
    默认: ‘%Y-%m-%d %H:%M:%S’
    日志的日期格式
  • LOG_LEVEL
    默认: ‘DEBUG’
    log的最低级别。可选的级别有: CRITICAL、
    ERROR、WARNING、INFO、DEBUG。
  • LOG_STDOUT
    默认: False
    如果为 True ,进程所有的标准输出(及错误)将会被重定向到log中。
  • RANDOMIZE_DOWNLOAD_DELAY
    默认: True
    如果启用,当从相同的网站获取数据时,Scrapy将会等待一个随机的值
    (0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY)。
    该随机值降低了crawler被检测到(接着被block)的机会。某些网站会分析请求,
    查找请求之间时间的相似性。
  • REDIRECT_MAX_TIMES
    默认: 20
    定义request允许重定向的最大次数。超过该限制后该request直接返回获取到的结果。
    对某些任务我们使用Firefox默认值。
  • ROBOTSTXT_OBEY
    默认: False
    是否遵循robots协议
  • SCHEDULER
    默认: ‘scrapy.core.scheduler.Scheduler’
    用于爬取的调度器。
  • SPIDER_MIDDLEWARES
    默认: {}
    保存项目中启用的下载中间件及其顺序的字典。
  • USER_AGENT
    默认: “Scrapy/VERSION
    (+http://scrapy.org)”
    爬取的默认User-Agent,除非被覆盖。

 图片 1

常用示例

Scrapy默认BASE设置

scrapy对某些内部组件进行了默认设置,这些组件通常情况下是不能被修改的,但是我们在自定义了某些组件以后,比如我们设置了自定义的middleware中间件,需要按照一定的顺序把他添加到组件之中,这个时候需要参考scrapy的默认设置,因为这个顺序会影响scrapy的执行,下面列出了scrapy的默认基础设置。

注意:如果你想要修改以下的某些设置,应该避免直接修改下列内容,而是修改其对应的自定义内容,例如,你想修改下面的DOWNLOADER_MIDDLEWARES_BASE的内容,你应该去修改DOWNLOADER_MIDDLEWARES这个内容,只是去掉了_BASE而已,其他的也是类似这样。

  • DOWNLOADER_MIDDLEWARES_BASE
    默认:

    {
        'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
        'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
        'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
        'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
        'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
        'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550,
        'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
        'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
        'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
        'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
        'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830,
        'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
        'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
    }
    

    包含Scrapy默认启用的下载中间件的字典。
    永远不要在项目中修改该设定,而是修改 DOWNLOADER_MIDDLEWARES 。

  • SPIDER_MIDDLEWARES_BASE
    默认:

    {
        'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
        'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
        'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
        'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
        'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
    }
    

    保存项目中默认启用的spider中间件的字典。
    永远不要在项目中修改该设定,而是修改 SPIDER_MIDDLEWARES 。

  • EXTENSIONS_BASE
    默认:

    {
        'scrapy.extensions.corestats.CoreStats': 0,
        'scrapy.telnet.TelnetConsole': 0,
        'scrapy.extensions.memusage.MemoryUsage': 0,
        'scrapy.extensions.memdebug.MemoryDebugger': 0,
        'scrapy.extensions.closespider.CloseSpider': 0,
        'scrapy.extensions.feedexport.FeedExporter': 0,
        'scrapy.extensions.logstats.LogStats': 0,
        'scrapy.extensions.spiderstate.SpiderState': 0,
        'scrapy.extensions.throttle.AutoThrottle': 0,
    }
    

    可用的插件列表。需要注意,有些插件需要通过设定来启用。默认情况下,
    该设定包含所有稳定(stable)的内置插件。

  • DOWNLOAD_HANDLERS_BASE
    默认:

    {
        'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
        'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
        'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
        's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
    }
    

    保存项目中默认启用的下载处理器(request downloader handler)的字典。
    永远不要在项目中修改该设定,而是修改 DOWNLOADER_HANDLERS 。

    如果需要关闭上面的下载处理器,您必须在项目中的 DOWNLOAD_HANDLERS
    设定中设置该处理器,并为其赋值为 None 。

1.scrapy.Spider

命令行选项(Command line options)

命令行传入的参数具有最高的优先级。 

您可以使用command line 选项 -s (或 --set) 来覆盖一个(或更多)选项。

日志记录样例:

scrapy crawl myspider -s LOG_FILE=scrapy.log

数据输出:

scrapy crawl myspider -o result.json

说明

即使我们添加了一些我们自定义的组件,scrapy默认的base设置依然会被应用,这样说可能会一头雾水,简单地例子:

假如我们在middlewares.py文件中定义了一个中间件,名称为MyMiddleware,我们把它添加到settings.py文件里面的DOWNLOADER_MIDDLEWARES,且他的执行顺序我们设置为450,最终的设置内容就是:

DOWNLOADER_MIDDLEWARES = {
    'cnblog.middlewares.MyMiddleware':450,
}

我们再来看一下默认的DOWNLOADER_MIDDLEWARES_BASE的内容:

DOWNLOADER_MIDDLEWARES_BASE ={
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550,
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830,
    'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

这个时候,scrapy下载中间件的最终的执行顺序就是,把DOWNLOADER_MIDDLEWARESDOWNLOADER_MIDDLEWARES_BASE里面的中间件按照顺序执行,100>300>350>400>450>500>550>580>590>600>700>750>830>850>900且全部执行,并不会因为我们定义了一个中间件,而使默认的中间件失效,也就是说,最终的结果其实是合并执行。

如果我们不想应用某一个默认的中间件,假如'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,那么,就应该在DOWNLOADER_MIDDLEWARES里面把它的值设置为None,像下面这样:

DOWNLOADER_MIDDLEWARES = {
    'cnblog.middlewares.MyMiddleware':450,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware':None,
}

scrapy.spiders.Spider

内置设置常用键值:

BOT_NAME

默认: ‘scrapybot’

Scrapy项目实现的bot的名字(也未项目名称)。 这将用来构造默认
User-Agent,同时也用来log。

当您使用 startproject 命令创建项目时其也被自动赋值。

图片 2

LOG_LEVEL

默认: ‘DEBUG’

log的最低级别。可选的级别有: CRITICAL、
ERROR、WARNING、INFO、DEBUG。参考Python logging使用;
调试使用Debug,上线后使用INFO.

ROBOTSTXT_OBEY

默认: False

如果启用,Scrapy将会尊重 robots.txt策略.
可以先确定目标站点是否有robots文件(有的站点真的没有这玩意==!),
不启用的话Scrapy启动速度会快一些.

DOWNLOAD_DELAY

默认: 0

下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度,
减轻服务器压力。同时也支持小数, 最好修改下设置一个3到5秒的值,
速度太快可能会被目标站点拉黑的.

 

DOWNLOAD_TIMEOUT

默认: 180  (秒)

ITEM_PIPELINES

默认: {}

保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。
不过值(value)习惯设定在0-1000范围内。

使用自定义PIPELINES对Item处理需要在这里面启用才会生效.

样例:

ITEM_PIPELINES = {
    'mybot.pipelines.validate.ValidateMyItem': 300,
    'mybot.pipelines.validate.StoreMyItem': 800,
}

name

USER_AGENT

默认: "Scrapy/VERSION (+http://scrapy.org)"

爬取的默认User-Agent,除非被覆盖,在发起请求(Request)时可以通过headers参数指定来覆盖该值:

scrapy.Request(url=地址,headers={"User-Agent": 指定UA将覆盖设置中设定的UA})

配合Faker使用效果更佳.

allowed_domains

start_urls

custom_settings

:在爬虫运行时用这个属性里的设置覆盖默认设置,它本身是字典格式的。

Crawler

该属性在初始化类之后由from_crawler()类方法设置,并链接到此蜘蛛实例绑定到的Crawler对象。

爬虫程序在项目中封装了大量的组件,用于单一入口访问(例如扩展,中间件,信号管理器等)。
请参阅Crawler API以了解更多关于它们的信息

Settings

这个爬虫的设置

Logger

日志

from_crawler(crawlerargs**kwargs*)

创建自己的爬虫,一般不需要重写,默认设置在scrapy.spider._init_py里。

start_requests()

返回一个生成器,用来发送爬取请求。Start_url[]中的url地址会默认的调用这个函数发送网页爬取请求。

parse(response)

解析响应,从返回的网页响应中提取数据。

log(message[, levelcomponent])

设置爬虫的日志,

closed(reason)

关闭爬虫

2.CrawlSpider

scrapy.spiders.CrawlSpider

相较于spider.Spider它提供rules对象以便爬取跟随连接,实现多级爬虫

Rules对象定义如下,爬虫根据rules定义的规则爬取网站,多个规则匹配同一条连接的时候按照顺序只输出第一条连接。

parse_start_url(response):

处理响应,返回一个Item或者request,或者一个包含两者的可迭代对象。

Rules类定义如下

Class scrapy.spiders.Rule(***link_extractor*callback=Nonecb_kwargs=Nonefollow=None,process_links=Noneprocess_request=None)**

link_extractor是连接提取器类,提取需要的链接。

Callback回调函数,解析或者爬取每一条提取出来的链接,返回一个Item/response列表,或者一个同时包括两者的列表。

Cb_kwargs回调函数字典类型的参数

Follow
对通过这个规则抽取出来的链接是否跟进,如果没有回调函数,默认为True,否则默认为False

Process-links是一个函数或则一个爬虫的名字,对提取出来的链接起一个过滤的作用。

Eg:

import scrapy

from scrapy.spiders import CrawlSpider, Rule

from scrapy.linkextractors import LinkExtractor



class MySpider(CrawlSpider):

    name = 'example.com'

    allowed_domains = ['example.com']

    start_urls = ['http://www.example.com']



    rules = (

        # Extract links matching 'category.php' (but not matching 'subsection.php')

        # and follow links from them (since no callback means follow=True by default).

        Rule(LinkExtractor(allow=('category.php', ), deny=('subsection.php', ))),



        # Extract links matching 'item.php' and parse them with the spider's method parse_item

        Rule(LinkExtractor(allow=('item.php', )), callback='parse_item'),

    )



    def parse_item(self, response):

        self.logger.info('Hi, this is an item page! %s', response.url)

        item = scrapy.Item()

        item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (d+)')

        item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()

        item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()

        return item

2.XMLFeedSpider

scrapy.spiders.XMLFeedSpider

主要用来爬取XML网页

  1. CSVFeedSpider

主要用来解析CSF网页

  1. SitemapSpider

scrapy.spiders.SitemapSpider

解析网站的robots.txt规则,建立网站地图,实现整站爬取(这个整站爬取是被动的,即你必须知道robots,或提前输入关于这个网站需要爬取的链接)

sitemap_urls一个需要爬取的url地址的列表

sitemap_rules一个存放爬取规则的列表,爬取规则为一个元组(regex, callback)

sitemap_follow所爬取的url地址所共同匹配的正则表达式列表

sitemap_alternate_links如果为真,取回除语言外完全相同的网址,如

,默认为假。

  1. 选择器:

Eg:

图片 3

同时,选择器可以使用正则表达式

 图片 4

3.Item

将非结构化的数据变成结构化数据,

classscrapy.item.Item([arg])中声明

使用条目装载机装载条目,

Eg:

图片 5

 图片 6

 

 

  1. Item Pipeline

classscrapy.loader.ItemLoader([itemselectorresponse, ]*kwargs*)

当爬虫爬取一个条目时,这个条目将被发送到项目管道,通过依次执行的几个组件处理数据,每个管道组件(有时也称为“管道”)是一个实现简单方法的Python类。

项目管道的典型用途是:

  • 获取干净的HTML数据
  • 验证爬取的数据(检查项目是否包含某些字段)
  • 检查重复(并删除它们)
  • 将爬取的项目存储在数据库中

每个项目管道组件是一个Python类,必须实现process_item(selfitemspider)方法:

process_item(selfitemspider):返回一个字典或者一个Item类或者或者一个twited
deferred(

Spider与item是对应的关系。

open_spider(selfspider):当spider开始运行时,运行这个函数

close_spider(selfspider)

from_crawler(clscrawler):如果存在,则调用此类方法从Crawler创建管道实例。
它必须返回一个新的管道实例。
抓取对象提供对所有Scrapy核心组件的访问,如设置和信号;
这是管道访问它们并将其功能挂接到Scrapy的一种方式

Eg:

异常:

 图片 7

存储到json:

 图片 8

存储到MongoDB

 图片 9

去重:

假设ID唯一

 图片 10

4.Requests

Class
scrapy.http.Request(url[, callbackmethod=’GET’headersbodycookiesmetaencoding=’utf-8′priority=0dont_filter=Falseerrbackflags])

由spider产生发送到downloader

 图片 11

避免与现有cookies合并

 图片 12

priority (int):设置爬取的优先级,默认是0;

dont_filter(boolean)参数为true是表示这个请求不应该被调度器过滤掉。
当您想要多次执行相同的请求时使用此选项,以忽略重复过滤器。
小心使用它,否则你将进入爬行循环。 默认为False。

errback (callable)异常处理函数

flags (list):发送到请求的标志可用于日志记录或类似的目的。

Request.meta special
keys:
Request.meta属性可以包含任意的数据,但是Scrapy和它的内置扩展可以识别一些特殊的键。

Those are:

  • · dont_redirect
  • · dont_retry
  • · handle_httpstatus_list
  • · handle_httpstatus_all
  • · dont_merge_cookies (see cookies parameter
    of Request constructor)
  • · cookiejar
  • · dont_cache
  • · redirect_urls
  • · bindaddress
  • · dont_obey_robotstxt
  • · download_timeout
  • · download_maxsize
  • · download_latency
  • · download_fail_on_dataloss
  • · proxy
  • · ftp_user (See FTP_USER for more info)
  • · ftp_password (See FTP_PASSWORD for more info)
  • · referrer_policy
  • · max_retry_times

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

requests的子类,主要用于表单处理

类方法:

from_response(response[, formname=None, formid=None, formnumber=0,formdata=None, formxpath=None, formcss=None, clickdata=None, dont_click=False, …])

返回一个新的FormRequest对象,其表单字段值预填充在给定响应中包含的HTML
<form>元素中。 有关示例,模拟用户登录。

 图片 13

该策略默认情况下会自动模拟任何可点击的表单控件(如<input type
=“submit”>)的点击。
即使这是相当方便的,而且往往是所期望的行为,有时它可能会导致难以调试的问题。
例如,处理使用javascript填充和/或提交的表单时,默认的from_response()行为可能不是最合适的。
要禁用此行为,可以将dont_click参数设置为True。
另外,如果你想改变点击的控件(而不是禁用它),你也可以使用clickdata参数。

参数:

  • response (Response object) – 该响应包含将用于预填充表单字段的HTML表单
  • formname (string) – 如果给定,将使用具有设置为此值的name属性的形式。
  • formid (string) – 如果给定,将使用具有设置为此值的id属性的形式。
  • formxpath (string) – 如果给定,将使用与xpath匹配的第一个表单。
  • formcss (string) – 如果给定,将使用与css选择器匹配的第一个表单。
  • formnumber (integer) – 要使用的表单的数量,当响应包含多个表单时。第一个(也是默认值)是 0。
  • formdata (dict) – 字段在表单数据中覆盖。如果响应 <form> 元素中已存在字段,则其值将被在此参数中传递的值覆盖。
  • clickdata (dict) – 属性来查找单击的控件。如果没有提供,表单数据将被提交,模拟第一个可点击元素的点击。除了html属性,控件可以通过其相对于窗体中其他提交表输入的基于零的索引,通过 nr 属性来标识。
  • dont_click (boolean) – 如果为True,表单数据将在不点击任何元素的情况下提交。

5.response

class scrapy.http.Response(url[, status=200, headers=None, body=b”, flags=None, request=None])

urljoin(url):可以将相对url地址结合成绝对url地址

follow(***url*callback=Nonemethod=’GET’headers=Nonebody=Nonecookies=Nonemeta=None,encoding=’utf-8′priority=0dont_filter=Falseerrback=None):**

返回请求实例以跟随链接url。 它接受与Request .__
init__方法相同的参数,但是url可以是相对URL或scrapy.link.Link对象,不仅是绝对URL。

除了绝对/相对URL和链接对象,TextResponse提供了一个支持选择器的follow()方法,这个两个函数可以用来翻页。

Eg:

Urljoin

 图片 14

Follow()

 图片 15

classscrapy.http.TextResponse(url[, encoding[, …]]):response的子类,增加了编码功能。

新的属性有:

Text:Response body, as unicode.

Encoding:与此响应编码的字符串。 通过尝试以下机制来解决编码问题:

10.1 在构造函数编码参数中传递的编码

10.2在Content-Type HTTP头中声明的编码。
如果这种编码是无效的(即未知的),它将被忽略,并尝试下一个解析机制。

10.3在响应正文中声明的编码。 TextResponse类不提供任何特殊的功能。
但是,HtmlResponse和XmlResponse类可以。

10.4通过查看响应主体来推断编码。 这是更脆弱的方法,也是最后一个尝试。

Selector;选择器实例化类

xpath(query):可以直接用response.xpath('//p')

css(query):可以直接用response.css('p')

class
scrapy.http.HtmlResponse(url[, …]):HtmlResponse类是TextResponse的一个子类,它通过查看HTML
meta http-equiv属性来添加编码自动发现支持,对应10.3。

class scrapy.http.XmlResponse(url[, …]):同上。

 

10.Link Extractors连接提取器

接口在scrapy.linkextractors.LinkExtractor

每个链接提取器唯一的公共方法是extract_links,它接收一个Response对象并返回一个scrapy.link.Link对象列表。
链接提取器的意图是实例化一次,他们的extract_links方法多次调用不同的响应来提取链接。

链接提取器通过一组规则在CrawlSpider类中使用(在Scrapy中可用),但是即使您不从CrawlSpider继承,也可以在您的蜘蛛中使用它,因为它的目的非常简单:提取链接。

Class
scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(),deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=(‘a’, ‘area’), attrs=(‘href’, ),canonicalize=False, unique=True, process_value=None, strip=True):

LxmlLinkExtractor是推荐的链接提取器,具有方便的过滤选项。
它使用lxml健壮的HTMLParser实现。

参数:

allow(一个正则表达式(或者列表)) –
一个正则表达式(或者正则表达式列表),为了被提取,(绝对)url必须匹配。如果没有给(或空),它将匹配所有链接。

deny(正则表达式(或列表)) –
(绝对)网址必须匹配才能排除(即未提取)的单个正则表达式(或正则表达式列表)。它优先于allow参数。如果没有给(或空)它不会排除任何链接。

allow_domains(str或list) –
一个单独的值或一个包含域的字符串列表,这些字段将被用于提取链接。

deny_domains(str或者list) –
一个单独的值或者一个包含域的字符串列表,不会被认为是用于提取链接。

deny_extensions(list) –
包含扩展的单个值或字符串列表,在提取链接时应被忽略。如果没有给出,它将默认为在scrapy.linkextractors包中定义的IGNORED_EXTENSIONS列表。

restrict_xpaths(str或list) –
是一个XPath(或XPath的列表),它定义了应该从中提取链接的响应内的区域。如果给定,只有这些XPath选择的文本将被扫描链接。看下面的例子。

restrict_css(str或者list) –
一个CSS选择器(或者选择器列表),它定义了应该从中提取链接的响应内的区域。具有与restrict_xpaths相同的行为。

tags(str或list) –
提取链接时要考虑的标记或标记列表。默认为(’a’,’area’)

attrs(list) –
查找提取链接时仅考虑在tags参数中指定的标签时应考虑的属性或属性列表。默认为(’href’,)

unique(boolean) – 是否应该对提取的链接应用重复过滤。

process_value(可调用) –
接收从tags和attrs中提取的每个值并且可以修改该值并返回新的值,或者返回None来忽略该链接的功能。如果没有给出,process_value默认为lambda
x:x。

canonicalize(Boolean) –
规范每个提取的URL(使用w3lib.url.canonicalize_url)。 默认为False。
请注意,canonicalize_url是用于重复检查;
它可以更改服务器端可见的URL,因此对于使用规范化和原始URL的请求,响应可能会有所不同。
如果您使用LinkExtractor来跟踪链接,那么保持默认的canonicalize =
False更健壮。

strip(boolean) – 是否从提取的属性中去除空白。
根据HTML5标准,必须从<a>,<area>和许多其他元素,<img>,<iframe>元素的src属性等从href属性中去除前导和尾随空白,因此LinkExtractor会在默认情况下删除空格字符。
设置strip =
False将其关闭(例如,如果您从允许前/后空格的元素或属性中提取url)。

  1. Setting

Setting源文件位置:scrapy.setting,default_settings,py

11.1  为每一个爬虫定制自己的设置选项

 图片 16

11.2  在命令行窗口下定制设置选项

 图片 17

11.3  在项目的setting.py里直接修改

11.4  访问setting

 图片 18

11.5  通过from_crawler()函数访问setting

 图片 19

11.6  默认的设置

AWS_ACCESS_KEY_ID:AWS访问口令字

AWS_SECRET_ACCESS_KE:AWS访问秘钥

BOT_NAME:项目名称

CONCURRENT_ITEMS:在项目处理器(也称为Item
Pipeline)中并行处理的最大并行items数(每个响应)。

CONCURRENT_REQUESTS:Scrapy下载器将执行的并发(即同时)请求的最大数量。

CONCURRENT_REQUESTS_PER_DOMAIN:
对任何单个域执行的并发(即同时)请求的最大数目。

CONCURRENT_REQUESTS_PER_IP:
对任何单个IP执行的并发(即同时)请求的最大数目。

DEFAULT_ITEM_CLASS: Default: ‘scrapy.item.Item’

DEFAULT_REQUEST_HEADERS:

 图片 20

DEPTH_LIMIT: Default:0

DEPTH_PRIORITY:默认是0,正值是广度优先爬取,负值深度优先爬取。

DEPTH_STATS:Default:True,是否收集最大的深度统计。

DEPTH_STATS_VERBOSE:默认是FALSE, 是否收集详细深度统计信息。
如果启用此功能,则会在统计信息中收集每个深度的请求数量。

DNSCACHE_ENABLED:Default:True是否启用DNS内存中缓存。

DNSCACHE_SIZE:Default:10000

DNS_TIMEOUT:60s

DOWNLOADER:Default: ‘scrapy.core.downloader.Downloader’

DOWNLOADER_HTTPCLIENTFACTORY:Default:’scrapy.core.downloader.webclient.ScrapyHTTPClientFactory’

DOWNLOADER_CLIENT_TLS_METHOD:Default:’TLS’,使用此设置可以自定义默认HTTP
/ 1.1下载器使用的TLS / SSL方法。

该设置必须是以下字符串值之一:

‘TLS’:映射到OpenSSL的TLS_method()(又名SSLv23_method()),它允许从平台支持的最高层开始进行协议协商。
默认,推荐

‘TLSv1.0’:这个值强制HTTPS连接使用TLS版本1.0; 设置这个如果你想Scrapy
<1.1的行为

“TLSv1.1”:强制TLS版本1.1

“TLSv1.2”:强制TLS版本1.2

“SSLv3”:强制SSL版本3(不推荐)

DOWNLOADER_MIDDLEWARES:Default:{}

DOWNLOADER_MIDDLEWARES_BASE:

包含Scrapy中默认启用的下载器中间件的字典。
低序靠近引擎,高序靠近下载器。
您不应该在您的项目中修改此设置,而是修改DOWNLOADER_MIDDLEWARES。

 

DOWNLOADER_STATS:默认值:True,是否启用下载器统计信息收集。

 

DOWNLOAD_DELAY:默认值:0

从同一网站下载连续页面之前,下载者应等待的时间(以秒为单位)。
这可以用来限制爬行速度,以避免打太大的服务器。 支持十进制数字。 例:

 

DOWNLOAD_DELAY = 0.25#250毫秒的延迟

此设置也受到RANDOMIZE_DOWNLOAD_DELAY设置(默认情况下启用)的影响。
默认情况下,Scrapy不会在两次请求之间等待一段固定时间,而是使用0.5 *
DOWNLOAD_DELAY和1.5 * DOWNLOAD_DELAY之间的随机时间间隔。

当CONCURRENT_REQUESTS_PER_IP非零时,每个IP地址而不是每个域强制执行延迟。

您也可以通过设置download_delay spider属性来更改每个蜘蛛的此设置。

 

DOWNLOAD_HANDLERS:默认:{}

包含在您的项目中启用的请求下载程序处理程序的字典。
例子,请参阅DOWNLOAD_HANDLERS_BASE格式。

 

DOWNLOAD_HANDLERS_BASE:

 图片 21

DOWNLOAD_TIMEOUT:默认:180

下载器在超时之前等待的时间(以秒为单位)

可以使用download_timeout spider属性和使用download_timeout
Request.meta项的每个请求来为每个蜘蛛设置此超时。

DOWNLOAD_MAXSIZE:每个响应最大是下载尺寸,默认是:1073741824 (1024MB)

可以使用download_timeout spider属性和使用download_timeout
Request.meta项的每个请求来为每个蜘蛛设置此超时。

如果设为0,则表示没有限制。

DOWNLOAD_WARNSIZE:默认:33554432(32MB)

下载器将开始发出警告的响应大小(以字节为单位)。

如果你想禁用它设置为0。

 

DOWNLOAD_FAIL_ON_DATALOSS:默认值:True.

损坏了的响应是否引发异常,即声明的Content-Length与服务器发送的内容不匹配,或者分块的响应没有正确完成。
如果为True,则这些响应会引发ResponseFailed([_DataLoss])错误。
如果为False,则通过这些响应,并将标志数据信息添加到响应中,即:response.flags中的’dataloss’为True。

或者,可以通过使用download_fail_on_dataloss
Request.meta键为False来设置每个请求的基础。

在这几种情况下,从服务器配置错误到网络错误到数据损坏,都可能发生错误的响应或数据丢失错误。
由用户决定是否有意义处理破坏的回应,因为他们可能包含部分或不完整的内容。
如果设置:RETRY_ENABLED为True,并且此设置设置为True,则ResponseFailed([_
DataLoss])失败将照常重试。

 

DUPEFILTER_CLASS:默认:’scrapy.dupefilters.RFPDupeFilter’,用于检测和过滤重复请求的类。

基于请求指纹的默认(RFPDupeFilter)过滤器使用scrapy.utils.request.request_fingerprint函数。
为了改变检查重复的方式,你可以继承RFPDupeFilter并覆盖它的request_fingerprint方法。
这个方法应该接受scrapy Request对象并返回它的指纹(一个字符串)。

您可以通过将DUPEFILTER_CLASS设置为“scrapy.dupefilters.BaseDupeFilter”来禁用对重复请求的过滤。
但是这样设置可能会进入爬行循环。
在不应该被过滤的特定请求上,将dont_filter参数设置为True通常是个好主意。

 

DUPEFILTER_DEBUG:默认:False

默认情况下,RFPDupeFilter只记录第一个重复的请求。
将DUPEFILTER_DEBUG设置为True将使其记录所有重复的请求。

 

EDITOR:默认:vi(在Unix系统上)或IDLE编辑器(在Windows上)

编辑器用于使用编辑命令编辑蜘蛛。
此外,如果EDITOR环境变量已设置,则编辑命令将优先于默认设置

 

EXTENSIONS:默认:: {}

包含在您的项目中启用的扩展的字典,以及他们的顺序。

 

EXTENSIONS_BASE:

FTP_PASSIVE_MODE:默认值:True

 

启动FTP传输时是否使用被动模式。

FTP_PASSWORD:默认值:“guest”

Request meta中没有“ftp_password”时用于FTP连接的密码。

 

FTP_USER:默认:“anonymous” 

Request meta中没有“ftp_user”时用于FTP连接的用户名。

 

ITEM_PIPELINES:默认:{}

包含要使用的项目管道的字典及其顺序。
顺序值是任意的,但通常在0-1000范围内定义它们。低顺序的在高顺序之前执行。

 

LOG_ENABLED:Default:True

LOG_ENCODING:Default:’utf-8′

 

LOG_FILE:默认:None

用于记录输出的文件名。 如果没有,将使用标准(print)错误。

 

LOG_FORMAT:Default:’%(asctime)s [%(name)s] %(levelname)s: %(message)s’

LOG_DATEFORMAT:Default:’%Y-%m-%d %H:%M:%S’

LOG_LEVEL:Default:’DEBUG’

LOG_STDOUT:默认:False

如果为True,则所有标准输出(和错误)将被重定向到日志。
例如,如果您打印“hello”,它将出现在Scrapy日志中。

 

LOG_SHORT_NAMES:默认:False

如果为True,日志将只包含根路径。
如果设置为False,则显示负责日志输出的组件

 

MEMDEBUG_ENABLED:默认:False

是否启用内存调试

 

MEMDEBUG_NOTIFY:默认:[]

当启用内存调试时,如果此设置不为空,内存报告将被发送到指定的地址,否则报告将被写入日志。

Example:MEMDEBUG_NOTIFY = [‘user@example.com’]

 

MEMUSAGE_ENABLED:默认值:True

范围:scrapy.extensions.memusage

是否启用内存使用扩展。
该扩展跟踪进程使用的峰值内存(将其写入统计信息)。
当超过内存限制(见MEMUSAGE_LIMIT_MB)时,它也可以选择关闭Scrapy进程,并在发生这种情况时通过电子邮件通知(请参阅MEMUSAGE_NOTIFY_MAIL)。

 

MEMUSAGE_NOTIFY_MAIL:默认:False

范围:scrapy.extensions.memusage

如果已达到内存限制,则通知电子邮件列表。

例:MEMUSAGE_NOTIFY_MAIL = [‘user@example.com’]

 

REDIRECT_MAX_TIMES:Default:20

REDIRECT_PRIORITY_ADJUST:默认值:+2

 

范围:scrapy.downloadermiddlewares.redirect.RedirectMiddleware

调整相对于原始请求的重定向请求优先级:

积极的优先级调整(默认)意味着更高的优先级。

负面的优先调整意味着低优先级。

 

RETRY_PRIORITY_ADJUST:默认值:-1

范围:scrapy.downloadermiddlewares.retry.RetryMiddleware

调整相对于原始请求的重试请求优先级:

积极的优先调整意味着更高的优先。

否定优先级调整(默认)意味着优先级较低

 

ROBOTSTXT_OBEY:默认:False

范围:scrapy.downloadermiddlewares.robotstxt

如果启用,Scrapy将尊重robots.txt策略。
欲了解更多信息,请参阅RobotsTxtMiddleware。

 

SCHEDULER:默认:’scrapy.core.scheduler.Scheduler’

调度程序用于抓取。

 

SCHEDULER_DEBUG:Default: False

SPIDER_MIDDLEWARES:Default:{}

 

SPIDER_MIDDLEWARES_BASE:

SPIDER_MODULES:Default:[]

 

URLLENGTH_LIMIT:Default:2083

USER_AGENT:Default:”Scrapy/VERSION (+)”

 

12.Sending e-mail

http://python.usyiyi.cn/translate/scrapy_14/index.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注