Django+Scrapy搭配使用

5 篇文章 0 订阅
1 篇文章 0 订阅

Django应用写好了,Scrapy的内容也写好了。

想要在Django中执行Scrapy爬虫么?直接在Django中运行command?不,这样会把Django阻塞的。下面介绍一种不阻塞Django依旧能调用Scrapy的方法。

本文主要讲述通过Scrapyd来进行Scrapy的调用。

目录

起步

配置Scrapy

Scrapyd操作

发布项目

调度爬虫

取消正在进行的任务

获取上传的项目

获取项目的版本

获取项目的爬虫列表

获取任务列表(Scrapyd 0.15版本以上)

删除项目版本

删除项目


起步

首先安装Scrapyd。

pip install Scrapyd

Scrapyd通常作为守护进程运行,它侦听运行爬虫的请求,并为每个请求生成一个进程,该进程基本上执行:scrapy crawl [myspider]。

Scrapyd还并行运行多个进程,将它们分配到max_proc和max_proc_per_cpu选项提供的固定数量的插槽中,启动尽可能多的进程来处理负载。

除了调度和管理进程之外,Scrapyd还提供了一个JSON web服务来上载新的项目版本(作为egg)和调度爬虫。

scrapyd的官方文档:Scrapyd — Scrapyd 1.2.0 documentation

安装完成后,进入到Scrapy项目的根目录下。执行

scrapyd

执行完成后,在浏览器输入

http://localhost:6800

可以看到这样的界面

接下来正式开始。

配置Scrapy

因为要和Django搭配使用,所以我们需要做一个小小的配置。记住,在scrapy项目的settings.py中修改!!!

# scrapy项目的settings.py文件中加入下面内容
import os
import sys

# DJANGO INTEGRATION
# E:\code\django_scrapy\extra_apps\mySpider\mySpider/set
# 注意这个路径修改成自己的Django项目所在的路径
sys.path.append('../../../django_scrapy')
# Do not forget the change Crawler part based on your mySpider name
# 下面这行的django_scrapy修改为自己的Django项目名字
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_scrapy.settings'

# This is required only if Django Version > 1.8
import django

django.setup()

# DJANGO INTEGRATION

Scrapyd操作

官方提供了API,我们可以直接通过请求进行操作。

  • 发布项目

url = "http://127.0.0.1:6800/addversion.json"
data = {
   "project": "mySpider", # Scrapy的项目名字
   "version": 1, # 版本号
   "egg": '1.egg' # 打包成egg文件的名字
}
res = requests.post(url, data=data)
  • 调度爬虫

POST http://127.0.0.1:6800/schedule.json
参数:

  • project (string, required),项目名称。
  • spider (string, required),爬虫名称,即 Spider下的name属性指定的。即scrapy crawl [爬虫名称]运行时的名称。
  • setting (string, optional),运行时的设置文件,默认为项目下settings.py。
  • jobid (string, optional),任务id,不指定则为默认生成的UUID。
  • _version (string, optional),运行的项目的版本。
  • 任何其他的参数都被传递给爬虫的属性,即scrapy crawl [爬虫名称] -a accounts=testAdmin后面-a所带的参数,在Spider中可通过self.testAdmin来获取值。

  • 取消正在进行的任务

POST http://localhost:6800/cancel.json
参数:

  • project (string, required),项目名称。
  • job (string, required),任务id。

  • 获取上传的项目

Scrapyd可管理多个Scrapy项目,可通过此方法获取上传的项目。

GET http://127.0.0.1:6800/listprojects.json

  • 获取项目的版本

返回上传的项目的版本列表,最后一个为当前版本。

GET http://127.0.0.1:6800/listversions.json
参数:

  • project (string, required),项目名称。
  • 获取项目的爬虫列表

返回指定版本,如不指定则为最新版本的可用爬虫列表。

GET http://127.0.0.1:6800/listspiders.json
参数:

  • project (string, required),项目名称。
  • _version (string, optional),运行的项目的版本。

  • 获取任务列表(Scrapyd 0.15版本以上)

获取指定项目的将要执行的、正在运行的、已经结束的任务

GET http://127.0.0.1:6800/listjobs.json
参数:

  • project (string, required),项目名称。

  • 删除项目版本

删除指定项目的指定版本,注意:当项目没有其他版本可以使用时,项目也会被删除。

POST http://127.0.0.1:6800/delversion.json


参数:

  • project (string, required) 项目名称。
  • version (string, required) 要删除项目的版本

  • 删除项目

删除一个项目及所有上传的版本。

POST http://127.0.0.1:6800/delproject.json


参数:

  • project (string, required) 项目名称。

附代码一份:

可在django中调用,将此代码放到Scrapy目录下即可。

import requests



def get_status():
    # 获取状态
    url = "http://127.0.0.1:6800/daemonstatus.json"
    res = requests.get(url)
    return res.json()


def get_project_list():
    # 获取项目列表
    url = "http://127.0.0.1:6800/listprojects.json"
    res = requests.get(url)
    return res.json()


def get_spider_list(project):
    # 获取项目下已发布的爬虫列表
    url = "http://127.0.0.1:6800/listspiders.json?project={}".format(project)
    res = requests.get(url)
    return res.json()


def spider_list_ver(project):
    # 获取项目下已发布的爬虫版本列表
    url = "http://127.0.0.1:6800/listversions.json?project={}".format(project)
    res = requests.get(url)
    return res.json()


def get_spider_status(spider):
    # 获取爬虫运行状态
    url = "http://localhost:6800/listjobs.json?project={}".format(spider)
    res = requests.get(url)
    return res.json()


def start_spider(project, spider, kwargs=None):
    # 运行一个爬虫
    url = "http://localhost:6800/schedule.json"
    data = {
        "project": project,
        "spider": spider,
    }
    if kwargs:
        data["data"] = kwargs
    res = requests.post(url, data=data)
    return res.json()


def del_spider(project, version):
    # 删除某一版本爬虫
    url = "http://127.0.0.1:6800/delversion.json"
    data = {
        "project": project,
        "version": version,
    }
    res = requests.post(url, data=data)
    return res.json()


def del_pro(project):
    # 删除项目。注意:删除之前需要停止爬虫,才可以再次删除
    url = "http://127.0.0.1:6800/delproject.json"
    data = {
        "project": project,
    }
    res = requests.post(url, data=data)
    return res.json()


def get_jobs(project):
    # 获取jobs
    url = "http://127.0.0.1:6800/listjobs.json?project={}".format(project)
    res = requests.get(url)
    return res.json()


def cancel(project, job_id):
    # 取消job
    url = "http://localhost:6800/cancel.json"
    data = {
        "project": project,
        "job": job_id
    }
    res = requests.post(url, data=data)
    return res.json()


def publish():
    # 发布项目
    url = "http://127.0.0.1:6800/addversion.json"
    data = {
        "project": "mySpider",
        "version": 1,
        "egg": '1.egg'
    }
    res = requests.post(url, data=data)
    return res.json()

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个用于快速开发Web应用程序的Python Web框架。Scrapy是一个用于爬取网页数据的Python框架。ECharts是一个可视化数据展示的JavaScript图表库。 Django可以作为Web应用程序的后端框架,结合Scrapy来爬取数据并将其存储到数据库中。然后,我们可以使用ECharts来展示这些数据。 首先,我们需要安装DjangoScrapy和ECharts库。使用Django创建一个新的项目,并在其中创建一个应用程序。接下来,使用Scrapy编写一个爬虫,通过定义爬取网页数据的规则来获取所需数据并存储到数据库中。最后,使用Django的模板系统和ECharts库来生成数据可视化的页面。 在Django中,我们可以创建一个视图函数,用于处理用户请求并从数据库中获取数据。然后,将这些数据传递给前端页面,让ECharts来生成图表展示。在前端页面中,我们可以使用ECharts提供的各种图表类型来展示数据,比如折线图、柱状图、饼图等。 在使用ECharts时,我们可以根据数据的特点选择合适的图表类型,并通过设置各种选项来自定义图表的样式和行为。比如,我们可以设置图表的标题、副标题、图例、坐标轴等信息,以及图表的颜色、标记点和线条等样式。 总之,结合DjangoScrapy和ECharts,我们可以快速开发出一个数据爬取、存储和可视化的Web应用程序。这样,我们可以更直观、更方便地展示和分析网页数据,从而得出有价值的结论。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值