2011-10-14 12 views
13

Zacząłem używać Scrapy, aby zdrapać kilka stron internetowych. Jeśli później dodam nowe pole do mojego modelu lub zmienię funkcje analizowania, chciałbym móc "odtworzyć" pobrane surowe dane w trybie offline, aby ponownie je zeskrobać. Wygląda na to, Scrapy miał możliwość przechowywania surowych danych w pliku powtórek w jednym punkcie:Powtórz pająk Scrapy na zapisanych danych

http://dev.scrapy.org/browser/scrapy/trunk/scrapy/command/commands/replay.py?rev=168

Ale ta funkcja wydaje się być usuwane w aktualnej wersji Scrapy. Czy istnieje inny sposób, aby to osiągnąć?

+1

ty spróbuj zapytać w ML? Czułbym się niesprawiedliwy, gdybym zadał ci tam twoje pytanie i po prostu wkleił odpowiedź: P – naeg

+1

Jeśli masz rozwiązanie mojego problemu, to jest w porządku - po prostu odwołaj się do źródła;) – del

Odpowiedz

18

Jeśli uruchomisz crawl --record=[cache.file] [scraper], będziesz mógł wtedy użyć replay [scraper].

Alternatywnie, można buforować wszystkie odpowiedzi z HttpCacheMiddleware włączając go w DOWNLOADER_MIDDLEWARES:

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 300, 
} 

Jeśli to zrobisz, za każdym razem po uruchomieniu skrobaczki, to najpierw sprawdzić system plików.

+0

Próbowałem 'scrapy crawl --record = mycache myspider' i otrzymałem komunikat o błędzie "crawl: error: no such option" --record ". Używam Scrapy 0.12.0.2548. Używanie HttpCacheMiddleware nie będzie działać, ponieważ z czasem wykonam wiele identycznych żądań, które zwrócą różne odpowiedzi. – del

3

Można włączyć HTTPCACHE_ENABLED jak powiedział http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled

buforować wszystkie żądania HTTP i odpowiedzi do wprowadzania CV indeksowania.

lub spróbuj Praca aby wstrzymać i wznowić indeksowania http://scrapy.readthedocs.org/en/latest/topics/jobs.html

+0

To nie zadziała, jeśli chcę złożyć identyczne żądania w czasie, które zwrócą różne odpowiedzi. Na przykład, jeśli chcę co godzinę oszukiwać stronę główną slashdot.org? Nie mogę tego odtworzyć, ponieważ zapis w pamięci podręcznej będzie nadpisywany co godzinę. – del