Jestem bardzo nowy w Pythonie i Django. Obecnie badam wykorzystanie Scrapy do skrobania witryn i zapisywania danych w bazie danych Django. Moim celem jest uruchomienie pająka opartego na domenie podanej przez użytkownika.Dostęp do modeli Django ze scrapy: definiowanie ścieżki do projektu Django
Pisałem pająka, która pobiera dane mi potrzebne i przechowywać go prawidłowo w pliku json Dzwoniąc
scrapy crawl spider -o items.json -t json
Jak opisano w scrapy tutorial.
Moim celem jest teraz sprawić, że pająk z powodzeniem będzie zapisywać dane w bazie danych Django, a następnie pracować nad uruchomieniem pająka w oparciu o dane wprowadzone przez użytkownika.
jestem świadomy, że istnieje wiele postów na ten temat, takie jak te: link 1 link 2 link 3
Ale mając wydać więcej niż 8 godzin na próby uzyskania to do pracy, jestem przy założeniu, że nie jestem jedynym, który wciąż boryka się z tym problemem. W tym celu postaram się zebrać całą wiedzę, którą zdobyłem w tym poście, a także mam nadzieję, że w późniejszym czasie opublikuję działające rozwiązanie. Z tego powodu ten post jest dość długi.
Wydaje mi się, że istnieją dwa różne sposoby zapisywania danych w bazie danych Django ze Scrapy. Jednym z nich jest użycie DjangoItem, innym jest zaimportowanie modeli bezpośrednio (jak zrobiono here).
Nie jestem w pełni świadomy zalet i wad tych dwóch, ale wydaje się, że różnica polega na tym, że używanie DjangoItem jest po prostu wygodniejsze i krótsze.
co zrobiłem:
Dodałem:
def setup_django_env(path):
import imp, os
from django.core.management import setup_environ
f, filename, desc = imp.find_module('settings', [path])
project = imp.load_module('settings', f, filename, desc)
setup_environ(project)
setup_django_env('/Users/Anders/DjangoTraining/wsgi/')
Błąd Dostaję to:
ImportError: No module named settings
myślę i” m definiuję ścieżkę do mojego projektu Django w niewłaściwy sposób?
Ja również próbowałem następujące:
setup_django_env('../../')
Jak mogę określić ścieżkę do mojego projektu Django poprawnie? (jeśli to jest problem)
Niewiarygodnie szczegółowy opis, dziękuję. Pracował jak urok. Wystąpił tylko jeden problem, musiałem zmienić os.environ ['DJANGO_SETTINGS_MODULE'] = 'myweb.settings' na os.environ ['DJANGO_SETTINGS_MODULE'] = 'settings'. Tak więc przedrostek myweb nie został dodany, inaczej nie rozpoznałby modułu. – Splurk
W prawo. Wartość 'DJANGO_SETTINGS_MODULE' bardzo zależy od tego, jak skonfigurowałeś zmienną ścieżki Pythona. To może być dość mylące, ponieważ django i scrapy używa domyślnie tej samej nazwy dla katalogu projektu i pakietu projektu. Ścieżka dodana do 'sys.path' powinna być nadrzędną katalogu zawierającego plik' settings.py'. W każdym razie, cieszę się, że to rozwiązało twój problem. – Rolando
To jest niesamowicie kompletna odpowiedź. Jedyny problem, jaki miałem, polegał na tym, że musiałem dodać 'import django django.setup()' –