(1)Scrapyrt安装与使用

1.简介

Scrapyrt为Scrapy提供了一个调度和使用蜘蛛(spider)的HTTP接口,有了它,我们就不需要再执行Scrapy命令,而是通过请求一个HTTP接口来调度和使用Scrapy蜘蛛(spider)的任务了。Scrapyrt比Scrapyd更轻量,如果不需要分布式多任务的话,可以简单使用Scrapyrt实现远程Scrapy任务的调度。

2.Scrapyrt安装与启动

安装Scrapyrt命令:

pip install scrapyrt

如果在requirements.txt定义了scrapyrt版本,可以根据定义版本安装,否则会安装最新版本,如图所示(查看包版本命令pip list):

(1)Scrapyrt安装与使用

我们可以通过Scrapy项目平台的终端输入命令启动http服务器:

scrapyrt

如图所示启动http服务器成功:

(1)Scrapyrt安装与使用

当然可以通过telnet命令查看端口是否相通:

telnet 127.0.0.1 9080

Scrapy项目默认是在端口9080上启动服务器。当然您可以使用-p选项更改服务器将监听的端口:

scrapyrt -p 9081

Scrapyrt组件将会查找项目根目录下的scrapy.cfg文件以确定您的项目设置,如果找不到,则会引发错误。当然还可以通过docker镜像运行Scrapyrt,具体操作这里就不介绍了,有需要可以通过最后参考文献官网地址学习。

3.Scrapyrt HTTP API

现在让我来了解下Scrapyrt HTTP API。Scrapyrt支持/crawl.json可以通过两种方式请求。

3.1GET

目前它接受以下参数:
●spider_name(蜘蛛名称):
◎字符串类型,必填。
等待调度的spider名称,如果没有找到对应spider名称API将会返回404状态码。
●url(网址):
◎字符串类型,如果start_requests参数未启用,则为必填。
默认情况下,API将只抓取设置的url参数标准的资源,并且不会执行任何其他请求。最重要的是它不会执行start_requests参数,并且spider不会访问其start_urls属性中定义的url。
●callback(回调)
◎字符串类型,不是必填。
该参数配置解析方法就是对应spider中scrapy.Request的callback解析方法(当前该参数不需要包含字符串”self”)。如果该参数配置解析方法未通过或未在spider上找到,则默认解析方法parse将被使用。
●errback(错误回调)
◎字符串类型,不是必填。
该参数配置解析方法就是对应spider.scrapy.Request的errback解析方法(当前该参数不需要包含字符串”self”)。Scrapy从spider发出的请求爬取数据,它必须作为调度spider的方法存在,否则会引发异常。
●max_requests(最大请求数)
◎整型,不是必填。
spider最大请求数。假设该参数设置为1。则spider将只安排一个请求,则spider生成的其他请求将被忽略。
●start_requests(是否开始请求)
◎布尔型,不是必填。
spider是否应该执行Scrapy.Spider.start_requests方法。在没有Scrapyrt的情况下正常运行 Scrapy Spider默认执行其start_requests。
true:如果配置true,Spider默认不在Scrapyrt API中执行抓取配置url,而是在默认项目Spider.start_requests方法中抓取start_urls 定义url。
false:如果配置false,Spider在默认项目Spider.start_requests方法中抓取start_urls 定义url,而不在Scrapyrt API中执行抓取配置url。
●crawl_args(爬取参数)
◎URL编码的JSON字符串,不是必填。
可以通过使用-a参数运行Spider:

scrapy crawl spider -a zipcode=14100

您还可以发送crawl_args={“zipcode”:”14100″}参数格式(urlencoded:crawl_args=%7B%22zipcode%22%3A%2014100%7D),并且Spider会得到zipcode参数。
●GET示例
假设我们定义一个爬取百度新闻热点spider示例:

http://127.0.0.1:9080/crawl.json?spider_name=baidu_news_board&url=https://top.baidu.com/board?tab=realtime

如图所示:

(1)Scrapyrt安装与使用

3.2POST

请求Body必须包含有效的json,其中包含有关使用Spider请求的信息。示例Body json:

{
    "request": {
        "url": "https://top.baidu.com/board?tab=realtime",
        "callback": "parse",
        "dont_filter": "True"
    },
    "spider_name": "baidu_news_board"
}

也可以配置复杂一点body json:

{
    "request": {
        "url": "https://top.baidu.com/board?tab=realtime",
        "meta": {
            "category": "some category",
            "item": {
                "discovery_item_id": "999"
            }
        },
        "callback": "parse",
        "dont_filter": "True",
        "cookies": {
            "foo": "bar"
        }
    },
    "spider_name": "baidu_news_board"
}

POST接口Body中的json必须具有以下键:
●spider_name(蜘蛛名称):
◎字符串类型,必填。
等待调度的spider名称,如果没有找到对应spider名称API将会返回404状态码。
●max_requests(最大请求数)
◎整型,不是必填。
spider最大请求数。
●request(请求对象)
包含Scrapy请求对象的参数,该对象将由Spider创建和调度。
请求json对象必须包含以下键:
◎url(网址):
字符串类型,必填。
它可以包含Scrapy Request类支持的所有参数。
●POST示例

http://127.0.0.1:9080/crawl.json
{
    "request": {
        "url": "https://top.baidu.com/board?tab=realtime",
        "callback": "parse",
        "dont_filter": "True"
    },
    "spider_name": "baidu_news_board"
}

如图所示:

(1)Scrapyrt安装与使用

3.3Response(响应)

crawl.json返回json对象。根据请求是否成功,json对象中的字段可能会有所不同。

3.3.1Success response(成功响应)

成功响应的json响应具有以下键:
●status(状态码)
成功响应状态总是ok。
●spider_name(蜘蛛名称):
请求中的spider。
●stats(统计数据)
Scrapy stats from finished job.

已完成作业的Scrapy统计数据。
●items(项目)
抓取的项目。
●items_dropped(丢弃项目)
丢弃的项目
●errors
包含具有爬取网址错误回溯的字符串列表。仅当调试设置设置为True时可用。
●示例:

{
    "status": "ok",
    "items": [
        {
            "HotSearchIndex": 2041483,
            "Title": "湖南青少年篮球决赛现场两队互殴",
            "Content": "1日,湖南岳阳第14届湖南省运动会上,长沙队在和娄底队进行比赛时,因两方队员发生矛盾互殴队员。目击者称:持续2分钟,后来...",
            "CreateTime": "2022-09-02 16:35:05",
            "UpdateTime": "2022-09-02 16:35:05"
            ]
        }
    ],
    "items_dropped": [],
    "stats": {
        "downloader/request_bytes": 439,
        "downloader/request_count": 1,
        "downloader/request_method_count/GET": 1,
        "downloader/response_bytes": 141460,
        "downloader/response_count": 1,
        "downloader/response_status_count/200": 1,
        "elapsed_time_seconds": 2.189224,
        "finish_reason": "finished",
        "finish_time": "2022-09-02 08:35:05",
        "item_scraped_count": 31,
        "log_count/DEBUG": 125,
        "log_count/INFO": 41,
        "response_received_count": 1,
        "scheduler/dequeued": 1,
        "scheduler/dequeued/memory": 1,
        "scheduler/enqueued": 1,
        "scheduler/enqueued/memory": 1,
        "start_time": "2022-09-02 08:35:03"
    },
    "spider_name": "baidu_news_board"
}

3.3.2Error response(失败响应)

失败响应的json响应具有以下键:
●status(状态码)
失败响应状态总是error。
●code(响应码)
HTTP响应码。
●message(消息)
请求失败的错误消息。
●示例:

{
    "status": "error",
    "message": "Missing required parameter: 'request'",
    "code": 400
}

还有Scrapyrt的Configuration(配置)、Command line arguments(命令行参数)、Logging(日志记录)等功能,精力有限,这里我就不多介绍了,有兴趣小伙伴可以到以下参考文献链接学习。

参考文献:
Scrapyrt主页https://scrapyrt.readthedocs.io/en/latest/index.html

Original: https://blog.csdn.net/wzk153/article/details/126668598
Author: 老葱头蒸鸡
Title: (1)Scrapyrt安装与使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/791031/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球