前言
要实现在Django中操纵Scrapy,需要两个包,Scrapyd
与python-scrapyd-api
。
Scrapyd
是scrapinghub官方提供的爬虫管理、部署、监控的方案之一。
python-scrapyd-api
提供了在python代码中与Scrapyd交互的方法。
参考:How to use Scrapy with Django Application
代码修改
- 在Django项目的
models.py
中定义好所需的model类 - 在Django项目的根目录下创建Scrapy项目
-
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上部署爬虫
- 先将scrapyd运行起来,在将要部署的scrapy项目根目录下执行
cmd:scrapy
- 修改scrapy项目下的
scrapy.cfg
文件(去掉#)
[deploy]
url = http://localhost:6800/
project = scrapy_test
- 在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后台查看爬取的数据