继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Scrapyd学习:入门与实践指南

叮当猫咪
关注TA
已关注
手记 207
粉丝 6
获赞 27
概述

本文详细介绍了Scrapyd学习的入门与实践指南,包括Scrapyd的安装、Scrapy项目的创建与基本使用、Scrapyd的配置与启动,以及项目部署与调度。文章还涵盖了Scrapyd的API接口使用和常见问题解决方法,帮助读者全面掌握Scrapyd学习。Scrapyd学习过程中,读者将学会如何远程调度Scrapy项目并进行大规模数据采集和网站监控。

Scrapyd学习:入门与实践指南
Scrapyd简介与安装

Scrapyd是什么

Scrapyd是一款用于Scrapy项目的远程调度工具。使用Scrapyd,你可以将Scrapy项目部署到远程服务器,并通过HTTP API来控制爬虫的启动、停止和状态查询。Scrapyd适用于需要大规模部署Scrapy项目的场景,比如大规模数据采集、网站监控等。

安装Scrapyd

安装Scrapyd非常简单,可以通过Python的包管理工具pip来安装。

pip install scrapyd

此外,Scrapyd依赖于Python的Twisted库,因此需要确保Twisted已经安装。

pip install Twisted

安装完成后,可以通过命令行启动Scrapyd服务。

scrapyd

启动成功后,Scrapyd将监听默认端口6800

Scrapy项目与Spider的基本使用

创建Scrapy项目

首先,我们需要创建一个新的Scrapy项目。可以通过以下命令创建。

scrapy startproject myproject

这将创建一个名为myproject的项目目录,其中包含了项目的基本文件结构。

项目文件结构

  • myproject/
    • myproject/
    • __init__.py
    • items.py
    • pipelines.py
    • settings.py
    • spiders/
      • __init__.py
    • scrapy.cfg

settings.py

settings.py文件中定义了项目的配置信息,例如爬虫的请求头、下载延迟等。

# settings.py

BOT_NAME = 'myproject'

SPIDER_MODULES = ['myproject.spiders']
NEWSPIDER_MODULE = 'myproject.spiders'

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'myproject.pipelines.MyPipeline': 300,
}

# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32

# Disable cookies (enabled by default)
COOKIES_ENABLED = False

编写基本Spider

接下来,我们需要编写一个基本的Spider,用于抓取数据。

# myproject/spiders/example_spider.py

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    start_urls = [
        'http://example.com',
    ]

    def parse(self, response):
        for item in response.css('div.item'):
            yield {
                'title': item.css('h2::text').get(),
                'link': item.css('a::attr(href)').get(),
            }

运行Spider

在本地运行Spider。

scrapy crawl example

编写Pipeline

为了处理抓取的数据,我们可以编写一个Pipeline。

# myproject/pipelines.py

from scrapy.exceptions import DropItem

class MyPipeline(object):
    def process_item(self, item, spider):
        if not item['title']:
            raise DropItem(f"Missing title in {item}")
        return item

编写Middleware

为了处理请求和响应,我们可以编写一个Middleware。

# myproject/middlewares.py

class MyMiddleware(object):
    def process_request(self, request, spider):
        print(f"Processing request: {request.url}")
        return request

    def process_response(self, request, response, spider):
        print(f"Processing response: {response.url}")
        return response
Scrapyd的配置与启动

配置Scrapyd

Scrapyd的配置文件位于scrapyd.conf。默认情况下,它位于Scrapyd安装目录的conf目录中。

# scrapyd.conf

[dbs]
sqlite = %(home)s/dbs/sqlite.db

[scrapyd]
http_port = 6800
log_level = INFO
log_rotate = daily
max_proc = 10
max_proc_per_cpu = 4
poll_interval = 5
bind_address = localhost
useragent = Scrapyd/1.2.1

[duplicates]
check = 1

启动Scrapyd服务

启动Scrapyd服务。

scrapyd

启动成功后,你可以在浏览器中访问http://localhost:6800,查看Scrapyd的管理界面。

项目部署与调度

部署Scrapy项目到Scrapyd

将Scrapy项目部署到Scrapyd服务器。

scrapyd deploy myproject

这将把项目打包并上传到Scrapyd服务器。

启动与停止爬虫任务

启动爬虫任务。

curl http://localhost:6800/schedule.json -d project=myproject -d spider=example

停止爬虫任务。

curl http://localhost:6800/cancel.json -d project=myproject -d spider=example -d job=jobid

监控爬虫任务

可以通过HTTP API来监控爬虫任务的进度。

curl http://localhost:6800/listjobs.json -d project=myproject
Scrapyd的API接口使用

API接口简介

Scrapyd提供了多个API接口,用于控制和监控爬虫任务。

  • /schedule.json:调度新的爬虫任务
  • /cancel.json:取消一个爬虫任务
  • /listprojects.json:列出所有已部署的项目
  • /listspiders.json:列出指定项目中的所有Spider
  • /listjobs.json:列出指定项目中的所有任务和它们的状态
  • /daemonstatus.json:获取后台服务状态
  • /log:获取任务的详细日志

API接口实践案例

调度新的爬虫任务。

curl http://localhost:6800/schedule.json -d project=myproject -d spider=example

响应示例:

{
    "status": "ok",
    "jobid": "09d0e6959797b0b40073711672e160f6"
}

列出所有已部署的项目。

curl http://localhost:6800/listprojects.json

响应示例:

{
    "status": "ok",
    "projects": ["myproject"]
}

列出指定项目中的所有Spider。

curl http://localhost:6800/listspiders.json -d project=myproject

响应示例:

{
    "status": "ok",
    "spiders": ["example"]
}

停止爬虫任务。

curl http://localhost:6800/cancel.json -d project=myproject -d spider=example -d job=09d0e6959797b0b40073711672e160f6

响应示例:

{
    "status": "ok"
}
常见问题与解决方法

常见问题

  1. 部署项目时遇到错误:检查Scrapy项目的配置是否正确,确保所有依赖已安装。
  2. 调度任务时失败:检查请求参数是否正确,确保项目已成功部署。
  3. 任务长时间卡住不执行:检查Scrapyd的配置,确保并发请求的数量和延迟设置合理。

解决方案

  1. 部署项目时遇到错误

    • 确保scrapy.cfg文件配置正确。
    • 检查settings.py中的配置信息。
    • 确保所有依赖库已安装。
    • 使用pip install -r requirements.txt安装依赖库。
  2. 调度任务时失败

    • 检查请求参数是否正确。
    • 确保项目已成功部署到Scrapyd。
    • 使用curl命令调试请求。
    • 查看Scrapyd的日志文件。
  3. 任务长时间卡住不执行
    • 检查Scrapyd的配置文件scrapyd.conf
    • 调整max_procmax_proc_per_cpu参数。
    • 检查网络连接是否正常。
    • 确保服务器资源充足。

通过以上内容,你应该已经掌握了Scrapyd的基本概念、安装方法、项目部署和API接口使用。希望这篇指南能帮助你更好地理解和使用Scrapyd。如果你有更多问题,可以参考Scrapy的官方文档或在社区中寻求帮助。推荐的学习网站包括慕课网等。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP