Scrapyd:分步教程

Scrapyd:分步教程

无论你是在大规模抓取数据,还是需要一种更轻松的方式来管理多个 spiders,Scrapyd 都能简化流程,并帮助一切顺畅运行。

什么是 Scrapyd?

Scrapyd 是一款用于在服务器上部署和管理 Scrapy spiders 的工具。你可以通过简单的 API 调用远程控制所有内容。Scrapyd 服务器作为后台服务运行,会自动处理 crawl 请求并执行它们,无需人工干预。

使用 Scrapyd,你可以

  • 轻松远程部署和管理你的 Scrapy 项目。

  • 通过统一的 JSON API 控制所有抓取任务。

  • 使用用户友好的 Web 界面监控和管理你的 spiders。

  • 通过在多台服务器上运行 spiders 来扩展你的数据采集能力。

  • 通过调整并发 spiders 的数量来提升服务器性能。

  • 使用 Celery 和 Gerapy 等工具自动化任务。

  • Scrapy 与 Python 框架(如 Django)集成,以增强你的 Web 应用。

现在,让我们深入了解如何使用 Scrapyd 部署你的 Scrapy spiders。

替代方案 --- 网页抓取 API 和工具

如果你的项目需要大规模抓取,并且你不想处理代理和验证码破解工具,你可以选择最佳网页抓取 API 和工具之一。下面,我列出了排名前 5 的网页抓取工具。

  1. Bright Data --- 高级抓取的综合最佳选择;具备广泛的代理管理功能和可靠的 API。

  2. Octoparse --- 用户友好的无代码工具,用于从网站自动提取数据。

  3. ScrapingBee --- 面向开发者的 API,可高效处理代理、浏览器和 CAPTCHA。

  4. Scrapy --- 开源 Python 框架,非常适合数据爬取和抓取任务。

  5. ScraperAPI --- 借助先进的反机器人技术处理高难度抓取;非常适合开发者。

我与上述任何服务提供商都没有关联,只是使用它们的体验不错。

如何使用 Scrapyd 运行 Scrapy Spiders

先决条件

确保你的系统已安装 Python 3+。你需要通过 pip 安装 Scrapy、Scrapyd 和 Scrapyd-client。

pip install scrapyd scrapy scrapyd-client

设置你的 Scrapy 项目

创建 Scrapy 项目:使用命令 scrapy startproject <PROJECT_NAME> 创建一个 Scrapy 项目。

创建 Spider:在 spiders 文件夹中,创建一个 爬虫工具.py 文件,并写入以下基础 spider:

复制代码
from scrapy.spiders import Spider

class MySpider(Spider):

name = 'product_scraper'

start_urls = ['https://www.scrapingcourse.com/ecommerce/']

def parse(self, response):

products = response.css('ul.products li.product')

data = []

for product in products:

product_name = product.css('h2.woocommerce-loop-product__title::text').get()

price = product.css('bdi::text').get()

data.append({'product_name': product_name, 'price': price})

self.log(data)

测试你的 Spider:通过运行以下命令在本地测试该 spider:

scrapy crawl product_scraper

这应该会从电商页面抓取并记录产品名称和价格。

将 Spiders 部署到 Scrapyd

启动 Scrapyd 服务器:运行以下命令来启动 Scrapyd 服务器:

scrapyd

你会看到服务器运行在 http://localhost:6800

配置 Scrapy 项目:修改项目中的 scrapy.cfg 文件,以包含正确的部署 URL:

settings

default = 抓取工具.settings

deploy:local

url = http://localhost:6800/

project = 爬虫

部署爬虫:使用以下命令将你的爬虫部署到 Scrapyd:

scrapyd-deploy local -p 抓取工具

你应该会看到一个确认部署成功的 JSON 响应。

监控部署 :打开浏览器并访问 http://localhost:6800. 你的项目应列在"可用项目"下。

使用 Scrapyd 管理爬虫

安排任务

你可以使用 Scrapyd 的 JSON API 来安排爬虫。调度端点是 http://localhost:6800/schedule.json. 使用以下 curl 命令:

curl http://localhost:6800/schedule.json -d project=爬虫工具 -d spider=product_scraper

或者,你可以创建一个 Python 脚本(schedule.py)来发起请求:

复制代码
import requests

url = 'http://localhost:6800/schedule.json'

data = {'project': '抓取工具', 'spider': 'product_scraper'}

response = requests.post(url, data=data)

if response.status_code == 200:

print(response.json())

else:

print(response.json())

监控作业

要监控所有正在运行的任务,请使用 listjobs.json 端点:

curl http://localhost:6800/listjobs.json?project=爬虫

你也可以创建一个 Python 脚本(monitor.py)用于监控:

复制代码
import requests

url = 'http://localhost:6800/listjobs.json'

params = {'project': '抓取工具'}

response = requests.get(url, params=params)

if response.status_code == 200:

print(response.json())

else:

print(response.json())

取消作业

要取消正在运行的作业,请使用 cancel.json 端点。提供你想取消的作业 ID:

curl http://localhost:6800/cancel.json -d project=爬虫工具 -d job=<TARGET_JOB_ID>

或者,在 Python 中:

复制代码
import requests

url = 'http://localhost:6800/cancel.json'

data = {'project': '抓取工具', 'job': '<TARGET_JOB_ID>'}

response = requests.post(url, data=data)

if response.status_code == 200:

print(response.json())

else:

print(response.json())

ScrapydWeb:用于管理 Scrapy 爬虫的用户界面

ScrapydWeb 是一个基于 Web 的界面,用于管理 Scrapyd 任务。它让你可以轻松安排和监控爬虫,不过目前仅支持 Python 3.9 以下版本。

安装 ScrapydWeb:使用 pip 安装:

pip install scrapydweb

启动 ScrapydWeb 服务器 :从你的项目文件夹运行命令 scrapydweb。该界面可通过 http://127.0.0.1:5000 访问。

安排并监控爬虫:使用该界面安排、运行和监控你的爬虫。你还可以设置 cron 作业,并配置 user agents 和 cookies 等爬虫参数。

Gerapy:高级爬虫管理

Gerapy 是另一个基于 Django 和 Scrapy 构建的爬虫管理工具。它提供了更多功能,如安排 cron 作业、可视化代码编辑器等。

安装 Gerapy:使用 pip 安装 Gerapy:

pip install gerapy

设置 Gerapy:按照设置说明初始化并配置 Gerapy,使其与 Scrapyd 同步。

创建并安排任务:使用 Gerapy 的 Web 界面创建任务,通过 interval 或 cron 触发器安排任务,并监控任务性能。

结论

Scrapyd 是管理 Scrapy 爬虫的强大解决方案,可实现高效的任务安排、监控和扩展。使用 Scrapyd 的 API、ScrapydWeb 或 Gerapy,你可以简化网页抓取工作流并提高生产力。

有什么无法正常工作吗?还有其他问题吗?欢迎在评论中告诉我。感谢阅读!:)

对其他网页抓取指南感兴趣

如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️

相关推荐
今天AI了吗27 分钟前
大模型技术全景(一):AI、机器学习、深度学习,三者的关系到底是什么?一文搞懂
数据库·人工智能·python·sql·深度学习·机器学习·rust
仙女修炼史43 分钟前
gradcam在yolo中的应用
人工智能·python·yolo
离陌在学C#1 小时前
C# 异步编程:从 async/await 到 Task 实战指南
开发语言·数据库·c#
羚尔1 小时前
C语言数组
c语言·开发语言
李可以量化1 小时前
Redis Client 从了解到精通(六):redis-py 服务控制与状态监控辅助函数详解
python
女神下凡2 小时前
芯参谋(11): 各种存储芯片电路设计
开发语言·嵌入式硬件
李可以量化2 小时前
Redis Client 从了解到精通(六)下:redis-py 时间、库管理与持久化辅助函数详解
python
晓窗科技2 小时前
AI基座哪家好
大数据·人工智能·python
冬夜戏雪2 小时前
笔试的Scanner in Scanner out
java·开发语言