2014-11-14 2 views
8

Мой опыт работы с Scrapy ограничен, и каждый раз, когда я его использую, он всегда проходит через команды терминала. Как я могу получить свои данные формы (url, который нужно очистить) от моего шаблона django, чтобы связаться со scrapy, чтобы начать делать соскабливание? До сих пор я думал только о том, чтобы получить возвращаемые данные формы из представлений django, а затем попытаться добраться до spider.py в каталоге scrapy, чтобы добавить URL-адрес данных формы в start_urls паука. Оттуда я действительно не знаю, как вызвать фактический обход, поскольку я привык делать это строго через мой терминал с командами вроде «scrapy crawl dmoz». Благодарю.Запуск Scrapy с точки зрения Django

крошечное правление: только что обнаруженный скрапид ... Я думаю, что с этим я могу идти в правильном направлении.

ответ

9

Вы на самом деле отреагировали на него с помощью редактирования. Лучшим вариантом было бы установить scrapyd service и сделать вызов API schedule.json, чтобы запустить задание на скремблирование.

Чтобы сделать этот API HTTP вызов, вы можете использовать либо urllib2/requests или использовать обертку вокруг scrapyd API - python-scrapyd-api:

from scrapyd_api import ScrapydAPI 

scrapyd = ScrapydAPI('http://localhost:6800') 
scrapyd.schedule('project_name', 'spider_name') 

Если отложить в сторону scrapyd и попытаться run the spider from the view, это будет заблокировать запрос до тех пор, пока скрученный реактор не остановится - поэтому на самом деле это не вариант.

Вы можете, однако, начать использовать celery (в тандеме с django_celery) - определить задачу, которая запустит ваш паук Scrapy и вызовет задачу из вашего представления django. Таким образом, вы бы поставили задачу в очередь и не хотели, чтобы пользователь ожидал завершения сканирования.


Кроме того, обратите внимание на django-dynamic-scraper пакет:

Джанго Dynamic скребок (DDS) представляет собой приложение для Django построить на вершине выскабливание каркаса Scrapy. Сохраняя многие функции Scrapy, вы можете динамически создавать и управлять пауками через интерфейс администратора Django .

+0

Вы знаете что-нибудь о том, как на самом деле настроить файловую структуру scrapy в проекте django? Могу ли я просто поместить мою папку scrapy inisde в мою папку проекта django? Или есть еще? Благодарю. – pyramidface

+0

Кроме того, не будет ли scrapyd делать то же самое, что и сельдерей в отношении обработки сканера асинхронно? – pyramidface

+0

@pyramidface, говоря о структуре проекта - я никогда лично не совмещал django и scrapy в одном проекте, но широко использовал оба продукта - попробуйте посмотреть на «django-dynamic-scraper» и примеры, которые он имеет близко - может быть, вы бы получить представление о том, как объединить оба инструмента в одном проекте. Или, начните новый вопрос SO, но будьте осторожны, чтобы сделать его конструктивным. – alecxe

Смежные вопросы