Django中操纵Scrapy

前言

要实现在Django中操纵Scrapy,需要两个包,Scrapydpython-scrapyd-api
Scrapyd是scrapinghub官方提供的爬虫管理、部署、监控的方案之一。
python-scrapyd-api提供了在python代码中与Scrapyd交互的方法。
参考:How to use Scrapy with Django Application

代码修改

  1. 在Django项目的models.py中定义好所需的model类
  2. 在Django项目的根目录下创建Scrapy项目
  3. pipelines.py中导入Django中定义好的model类,通过这些类使scrapy与Django进行数据交互
from django_app.models import UserItem_dj,fans_1_Item_dj,fans_2_Item_dj,post_Item_dj

4.配置Django嵌入,在Scrapy的settings.py中加入以下代码

import os
import sys

# DJANGO INTEGRATION

sys.path.append(os.path.dirname(os.path.abspath('.')))
# Do not forget the change iCrawler part based on your project name
os.environ['DJANGO_SETTINGS_MODULE'] = 'DjangoVisual.settings'

# This is required only if Django Version > 1.8
import django
django.setup()

# DJANGO INTEGRATION

实验项目路径:D:\Python\Graduation_pj\iCrawler

在scrapyd上部署爬虫

  1. 先将scrapyd运行起来,在将要部署的scrapy项目根目录下执行
    cmd:scrapy
  2. 修改scrapy项目下的scrapy.cfg文件(去掉#)
[deploy]
url = http://localhost:6800/
project = scrapy_test
  1. 在scrapy项目根目录下执行scrapyd-deploy
    cmd:scrapyd-deploy

运行scrapyd-deploy时可能与遇到”这个命令不存在”等报错
解决方法如下:(参考)
在你的python目录下的Scripts文件夹中,增加一个scrapyd-deploy.bat文件。
内容为:

@echo off
"D:\Anaconda2\envs\py3\envs\graduation_pj\python.exe" "D:\Anaconda2\envs\py3\envs\graduation_pj\Scripts\scrapyd-deploy" %*

通过Django操纵Scrapy

  • 启动Django
    cmd:python manage.py runserver

发出post请求,操纵爬虫爬取某网页的所有url
requests.post(url='http://127.0.0.1:8000/api/crawl/', data={"url": url})

发出get请求,获取爬虫的状态
requests.get(url='http://127.0.0.1:8000/api/crawl/', params={"uniqe_id": uniqe_id,"task_id":task_id})

  • 可进入Django的admin后台查看爬取的数据
    原文作者:听闻不见
    原文地址: https://www.jianshu.com/p/a32c154d9c93
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞