Scrapyd客户端
项目描述
Scrapyd-client是Scrapyd的客户端。它提供
命令行工具
scrapyd-deploy,将您的项目部署到Scrapyd服务器
scrapyd-client,用于部署后与项目交互
Python 客户端
ScrapydClient,用于在 Python 代码中与 Scrapyd 交互
scrapyd-deploy
将项目部署到 Scrapyd 服务器通常涉及两个步骤
Eggifying 您的项目。您需要安装 setuptools 来完成此操作。请参阅下方的 Egg 注意事项。
通过 addversion.json 端点将 egg 上传到 Scrapyd 服务器。
scrapyd-deploy 工具自动执行构建 egg 并将其推送到目标 Scrapyd 服务器的过程。
包含静态文件
如果 egg 需要包含静态(非 Python)文件,请编辑项目中的 setup.py 文件。否则,您可以跳过此步骤。
如果您没有 setup.py 文件,请使用以下命令创建一个:
scrapyd-deploy --build-egg=/dev/null
然后,在 setup.py 文件中设置 setup() 函数调用中的 package_data 关键字参数。示例(注意:projectname 将是您项目的名称)
from setuptools import setup, find_packages
setup(
name = 'project',
version = '1.0',
packages = find_packages(),
entry_points = {'scrapy': ['settings = projectname.settings']},
package_data = {'projectname': ['path/to/*.json']}
)
部署项目
首先将 cd 进入项目的根目录,然后可以使用以下命令部署项目
scrapyd-deploy <target> -p <project>
这将 eggify 您的项目并将其上传到目标。如果您的项目中有一个 setup.py 文件,它将被使用,否则将自动创建一个。
如果成功,您应该看到类似于以下所示的 JSON 响应
Deploying myproject-1287453519 to http://localhost:6800/addversion.json Server response (200): {"status": "ok", "spiders": ["spider1", "spider2"]}
为了避免必须指定目标和项目,您可以在 Scrapy 配置文件 中设置默认值。
版本控制
默认情况下,scrapyd-deploy 使用当前时间戳生成项目版本,如上所示。但是,您可以使用 --version 传递自定义版本。
scrapyd-deploy <target> -p <project> --version <version>
版本必须与 LooseVersion 可比较。除非指定,否则 Scrapyd 将使用最高版本。
如果您使用 Mercurial 或 Git,可以使用 HG 或 GIT 分别作为 --version 的参数,以使用当前修订版作为版本。您可以通过将其添加到 scrapy.cfg 中目标的条目来避免指定版本参数。
[deploy]
...
version = HG
本地设置
您可能希望保留某些设置为本地,而不是将它们部署到 Scrapyd。为了完成此操作,您可以在项目根目录中创建一个 local_settings.py 文件(其中包含 scrapy.cfg 文件),并在项目的设置中添加以下内容
try:
from local_settings import *
except ImportError:
pass
scrapyd-deploy 不会部署项目模块之外的内容,因此 local_settings.py 文件不会被部署。
Egg 注意事项
在为 Scrapy 项目构建 eggs 时需要注意的一些事项
确保在构建 egg 时不包含任何本地开发设置。find_packages 函数可能会抓取您的自定义设置。在大多数情况下,您希望上传带有默认项目设置的 egg。
避免在项目代码中使用 __file__,因为它与 eggs 不兼容。考虑使用 pkgutil.get_data 代替。而不是
path = os.path.dirname(os.path.realpath(__file__)) # BAD open(os.path.join(path, "tools", "json", "test.json"), "rb").read()
使用
import pkgutil pkgutil.get_data("projectname", "tools/json/test.json")
在项目中写入磁盘时请小心,因为Scrapyd很可能会以不同的用户身份运行,可能没有对某些目录的写入权限。如果可能,请避免写入磁盘,并始终使用 tempfile 来处理临时文件。
包含依赖项
如果您的项目有额外的依赖项,您可以在Scrapyd服务器上安装它们,或者可以通过以下两个步骤将它们包含在项目的egg文件中:
在项目的根目录下创建一个 requirements.txt 文件
在构建或部署项目时使用 --include-dependencies 选项
scrapyd-deploy --include-dependencies
scrapyd-client
要查看每个子命令的参考,请调用 scrapyd-client <subcommand> --help。
在可能使用通配符进行过滤的地方,可以使用 fnmatch 来实现。如果 scrapy.cfg 中存在一个 --project 选项,则可以省略。
deploy
这是对 scrapyd-deploy 的封装。
projects
列出Scrapyd实例的所有项目
# lists all projects on the default target scrapyd-client projects # lists all projects from a custom URL scrapyd-client -t http://scrapyd.example.net projects
schedule
安排一个或多个蜘蛛执行
# schedules any spider scrapyd-client schedule # schedules all spiders from the 'knowledge' project scrapyd-client schedule -p knowledge \* # schedules any spider from any project whose name ends with '_daily' scrapyd-client schedule -p \* \*_daily
spiders
列出一个或多个项目的蜘蛛
# lists all spiders scrapyd-client spiders # lists all spiders from the 'knowledge' project scrapyd-client spiders -p knowledge
ScrapydClient
在Python代码中与Scrapyd进行交互。
from scrapyd_client import ScrapydClient
client = ScrapydClient()
for project in client.projects():
print(client.jobs(project=project))
Scrapy配置文件
目标
您可以在项目的 scrapy.cfg 文件中定义Scrapyd目标。示例
[deploy]
url = http://scrapyd.example.com/api/scrapyd
username = scrapy
password = secret
project = projectname
现在,您可以在不使用 <target> 参数或 -p <project> 选项的情况下部署项目
scrapyd-deploy
如果您有多个目标,请将目标名称添加到节名称中。示例
[deploy:targetname]
url = http://scrapyd.example.com/api/scrapyd
[deploy:another]
url = http://other.example.com/api/scrapyd
如果您正在使用CD框架,则不需要将您的机密信息提交到您的存储库。您可以使用环境变量扩展,如下所示
[deploy]
url = $SCRAPYD_URL
username = $SCRAPYD_USERNAME
password = $SCRAPYD_PASSWORD
或者使用此语法
[deploy]
url = ${SCRAPYD_URL}
username = ${SCRAPYD_USERNAME}
password = ${SCRAPYD_PASSWORD}
要部署到一个目标,运行
scrapyd-deploy targetname -p <project>
要部署到所有目标,使用 -a 选项
scrapyd-deploy -a -p <project>
要列出所有可用的目标,使用 -l 选项
scrapyd-deploy -l
要列出一个目标上所有可用的项目,使用 -L 选项
scrapyd-deploy -L example
虽然您的目标需要在 scrapy.cfg 中使用其URL进行定义,但您可以使用 netrc 来处理用户名和密码,如下所示
machine scrapyd.example.com username scrapy password secret
历史记录
1.2.3 (2023-01-30)
feat: 添加 scrapyd-client --username 和 --password 选项。(@mxdev88)
feat: 扩展 scrapy.cfg 文件中的环境变量。(@mxdev88)
feat: 添加 ScrapydClient:一个用于与Scrapyd交互的Python客户端。(@mxdev88)
添加对Python 3.10和3.11的支持。(@Laerte)
1.2.2 (2022-05-03)
fix: 修复使用 scrapyd-deploy --deploy-all-targets 时出现的 FileNotFoundError。
1.2.1 (2022-05-02)
feat: 添加 scrapyd-deploy --include-dependencies 选项,从 requirements.txt 文件中安装项目依赖项。(@mxdev88)
fix: 删除由 scrapyd-deploy --deploy-all-targets 创建的临时目录。
chore: 解决弃用警告。
chore: 添加对 urllib3 的依赖。
1.2.0 (2021-10-01)
添加对Scrapy 2.5的支持。
添加对Python 3.7、3.8、3.9、PyPy3.7的支持。
放弃对Python 2.7、3.4、3.5的支持。
移除 scrapyd_client.utils.get_config,它是一个针对Python 2.7的兼容性包装器。
1.2.0a1 (2017-08-24)
将 scrapyd-deploy 安装为控制台脚本。
新增了带有 deploy、projects、spiders 和 schedule 子命令的 scrapyd-client CLI。
1.1.0 (2017-02-10)
新增 -a 选项以部署到所有目标。
修复了 egg 部署错误中的 returncode。
添加了 Python 3 支持。
放弃了 Python 2.6 支持。
1.0.1 (2015-04-09)
初始版本。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
scrapyd-client-1.2.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fef27cc0d8bf54cbd03467250fb0705635733de81a577b0ba00c739c2d96c894 |
|
MD5 | 7582b9d8037dd2ae89bb824b1a4683d0 |
|
BLAKE2b-256 | a2d82ab34e608eb6f921ef2747d7b70b4bf556136746c99640ce5c4964fdc4d1 |
scrapyd_client-1.2.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | beeab9310f1ff942978ca472e4ccdc88648cfde3c33734a11337a93514a43859 |
|
MD5 | 8f9197855088b25bff272fa1180695aa |
|
BLAKE2b-256 | 5e2a341614d6387d6607f526d91f7823692ef0e1c46406b3df421f0a822d18cb |