scrapy官网概要(三)之设置与调试


类别:数据计算   

发布时间:2019/11/18 16:37:40   更新时间:2020/07/31 19:48:25


设置(settings)

不同的设置方法和优先级

可以使用不同的机制填充设置,每种机制具有不同的优先级。以下是按优先级从高到低排列的列表:

1、命令行选项(最高优先级)

例:

scrapy crawl myspider -s LOG_FILE=scrapy.log

 

2、每个spider的设置

例:

class MySpider(scrapy.Spider):
    name = 'myspider'

 
    custom_settings = {
        'SOME_SETTING': 'some value',
    }

 

3、项目设置模块

将settings.py在为项目创建的文件中添加或更改设置。

4、每个命令的默认设置

每个Scrapy工具命令可以具有自己的默认设置,这些默认设置将覆盖全局默认设置。这些自定义命令设置default_settings在命令类的属性中指定。

5、默认全局设置(优先级较低)

全局默认值位于scrapy.settings.default_settings 模块中,并在“ 内置设置参考”部分中进行了说明。

常用设置参考

常用的设置项会则settings.py中。

设置名称通常以它们配置的组件为前缀。例如,对于一个虚构的robots.txt扩展正确的设置名称会ROBOTSTXT_ENABLED,ROBOTSTXT_OBEY,ROBOTSTXT_CACHEDIR,等。

异常

DropItem item管道阶段必须引发的异常才能停止处理item。

CloseSpider关闭spider

DontCloseSpider信号处理程序中引发此异常,以防止蜘蛛网被关闭

IgnoreRequest 忽略该请求

NotConfigured 未配置

NotSupported 不支持功能

计数器

Scrapy提供了一种方便的工具来收集键/值形式的统计信息,其中值通常是计数器。该功能称为Stats Collector,可以通过Crawler APIstats 属性进行访问,如下面的“ Common Stats Collector使用”部分中的示例所示。

但是,统计信息收集器始终可用,因此无论是否启用统计信息收集,您都可以始终将其导入模块并使用其API(以增加或设置新的统计信息键)。如果将其禁用,该API仍将起作用,但不会收集任何东西。这是为了简化统计信息收集器的使用:您应该花费不超过一行代码来收集蜘蛛,Scrapy扩展或使用统计信息收集器的任何代码中的统计信息。

shell

Scrapy Shell是一个交互式Shell,您可以在其中运行非常快速的调试爬虫代码,而不必运行Spider。它打算用于测试数据提取代码,但是您实际上可以将其用于测试任何类型的代码,因为它也是常规的Python shell。

该外壳用于测试XPath或CSS表达式,并查看它们的工作方式以及从您要抓取的网页中提取的数据。它使您可以在编写蜘蛛时以交互方式测试表达式,而不必运行蜘蛛来测试每个更改。

熟悉Scrapy shell之后,您会发现它是开发和调试Spider的宝贵工具。

启动

scrapy shell <url>

 

Scrapy Shell从下载的页面自动创建一些方便的对象,例如Response对象和 Selector对象(用于HTML和XML内容)。

shell下的对象

这些对象是:

crawler-当前Crawler对象。

spider-已知用于处理URL的Spider,Spider如果没有找到当前URL 的Spider,则为 对象

request- Request最后获取的页面的对象。您可以replace() 使用fetch 快捷方式修改此请求,也可以获取新请求(不离开外壳)。

response- Response包含最后获取的页面的对象

settings-当前的Scrapy设置

从spider调用shell(用来检查响应)

import scrapy

 

 
class MySpider(scrapy.Spider):
    name = "myspider"
    start_urls = [
        "http://example.com",
        "http://example.org",
        "http://example.net",
    ]

 
    def parse(self, response):
        # We want to inspect one specific response.
        if ".org" in response.url:
            from scrapy.shell import inspect_response
            inspect_response(response, self)

 
        # Rest of parsing code.

 

调试spider

parse命令

检查Spider输出的最基本方法是使用 parse命令。它允许在方法级别检查蜘蛛的不同部分的行为。它的优点是灵活易用,但不允许在方法内部调试代码。

scrapy shell

尽管该parse命令对于检查Spider的行为非常有用,但除了显示收到的响应和输出之外,检查回调内部发生的操作也无济于事。这个时候用scrapy shell。

查看浏览器中的显示

只想查看某个响应在浏览器中的外观,就可以使用该open_in_browser功能。

from scrapy.utils.response import open_in_browser

 
def parse_details(self, response):
    if "item name" not in response.body:
        open_in_browser(response)

日志

测试(spider contracts)


本文网址:https://www.pyfield.com/blog/?id=43