2014-11-14 20 views
8

Moje doświadczenie ze Scrapy jest ograniczone i za każdym razem, kiedy go używam, zawsze jest to wykonywane za pomocą poleceń terminalu. Jak mogę uzyskać dane mojego formularza (adres URL do skasowania) z mojego szablonu django, aby skomunikować się ze scrapy, aby zacząć robić skrobanie? Do tej pory zastanawiałem się jedynie, czy pobrać dane formularza z widoków django, a następnie spróbować dotrzeć do spider.py w katalogu scrapy, aby dodać adres URL formularza do parametrów start_urls spider. Stamtąd nie wiem, jak wywołać rzeczywiste przeszukiwanie, ponieważ jestem przyzwyczajony do tego, że robię to ściśle za pośrednictwem mojego terminalu za pomocą komend takich jak "scrapy crawl dmoz". Dzięki.Uruchamianie Scrapy z widoku Django

tiny edit: Właśnie odkryłem scrapyd ... Myślę, że mógłbym zmierzyć się w tym kierunku.

Odpowiedz

9

Właściwie odpowiedziałeś na to, edytując. Najlepszym rozwiązaniem byłoby ustawienie scrapyd service i wykonanie wywołania API na schedule.json, aby uruchomić zadanie skrobania.

Aby dokonać tego połączenia HTTP API można użyć urllib2/requests lub użyj owijkę wokół scrapyd API - python-scrapyd-api:

from scrapyd_api import ScrapydAPI 

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

Jeśli odłożyć scrapyd i spróbować run the spider from the view, to będzie zablokować żądanie, aż skręcony reaktor zatrzyma się - dlatego nie jest to naprawdę opcja.

Możesz jednak zacząć używać celery (w parze z django_celery) - zdefiniuj zadanie, które uruchomi twój pająk Scrapy i wywoła zadanie z widoku django. W ten sposób można umieścić zadanie w kolejce i nie będzie mieć użytkownika czekającego na zakończenie pobierania.


Również spojrzeć na opakowaniu django-dynamic-scraper:

Django dynamiczne Scraper (DDS) to aplikacja dla Django zbudować na szczycie skrobanie ramowej Scrapy. Zachowując wiele funkcji Scrapy , pozwala dynamicznie tworzyć i zarządzać pająkami poprzez interfejs administracyjny Django .

+0

Czy wiesz coś o tym, jak właściwie skonfigurować strukturę plików do scrapy w projekcie django? Czy mogę po prostu umieścić mój folder do scrapy w moim folderze projektu django? Czy może jest coś więcej? Dzięki. – pyramidface

+0

Co więcej, czy scrapyd nie zrobiłby tego samego, co seler w kwestii asynchronicznego obchodzenia się z raczkiem? – pyramidface

+0

@pyramidface mówi o strukturze projektu - Nigdy nie osobiście łączyłem django i scrapy w jednym projekcie, ale szeroko stosowałem oba produkty - spróbuj spojrzeć na "django-dynamic-scraper" i przykłady, które ma - może być uzyskać pomysł, jak połączyć oba narzędzia w jednym projekcie. Albo, zacznij nowe pytanie SO, ale uważaj, aby było ono konstruktywne. – alecxe

Powiązane problemy