2011-10-14 26 views
13

Tôi đã bắt đầu sử dụng Scrapy để xóa một vài trang web. Nếu sau này tôi thêm trường mới vào mô hình của mình hoặc thay đổi chức năng phân tích cú pháp của mình, tôi muốn có thể "phát lại" dữ liệu thô đã tải xuống ngoại tuyến để quét lại. Dường như Scrapy có khả năng lưu trữ dữ liệu thô trong một file replay tại một thời điểm:Phát lại một con nhện bị lơ lửng trên dữ liệu được lưu trữ

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

Nhưng chức năng này dường như đã được loại bỏ trong phiên bản hiện tại của Scrapy. Có cách nào khác để đạt được điều này không?

+1

bạn đã cố gắng hỏi tại ML? Nó cảm thấy không công bằng với tôi nếu tôi hỏi câu hỏi của bạn ở đó và chỉ dán câu trả lời: P – naeg

+1

Nếu bạn có một giải pháp cho vấn đề của tôi, đó là tốt của tôi - chỉ cần tham khảo nguồn của bạn;) – del

Trả lời

18

Nếu bạn chạy crawl --record=[cache.file] [scraper], bạn sẽ có thể sử dụng replay [scraper].

Ngoài ra, bạn có thể cache tất cả các phản ứng với HttpCacheMiddleware bằng cách bao gồm nó trong DOWNLOADER_MIDDLEWARES:

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

Nếu bạn làm điều này, mỗi khi bạn chạy các scraper, nó sẽ kiểm tra hệ thống tập tin đầu tiên.

+0

Tôi đã cố gắng thu thập dữ liệu «scrapy --record = mycache» myspider' và nhận được thông báo lỗi "crawl: error: không có tùy chọn như vậy: --record". Tôi đang sử dụng Scrapy 0.12.0.2548. Sử dụng HttpCacheMiddleware sẽ không hoạt động vì tôi sẽ thực hiện nhiều yêu cầu giống hệt nhau theo thời gian và sẽ trả về các phản hồi khác nhau. – del

3

Bạn có thể bật HTTPCACHE_ENABLED như đã nói http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled

để cache tất cả các yêu cầu http và phản ứng để thực hiện tiếp tục bò.

HOẶC thử Jobs để tạm dừng và tiếp tục bò http://scrapy.readthedocs.org/en/latest/topics/jobs.html

+0

Điều này sẽ không hoạt động nếu tôi muốn thực hiện các yêu cầu giống hệt nhau theo thời gian sẽ trả về các phản hồi khác nhau. Ví dụ, nếu tôi muốn cạo trang chủ slashdot.org mỗi giờ thì sao? Tôi không thể phát lại điều này, vì mục được lưu trong bộ nhớ cache sẽ chỉ bị ghi đè mỗi giờ. – del

Các vấn đề liên quan