2011-07-29 18 views
6

Tôi đang cố gắng xây dựng một ứng dụng Django có chức năng giống như một cửa hàng. Các mục được cạo từ khắp nơi trên internet và cập nhật cơ sở dữ liệu dự án Django liên tục theo thời gian (cứ vài ngày một lần). Tôi đang sử dụng khuôn khổ Scrapy để thực hiện cạo, và trong khi có một thử nghiệm DjangoItem feature, tôi thà tránh xa nó vì nó không ổn định.Cách tốt nhất để liên tục xuất thông tin từ trình thu thập dữ liệu Scrapy vào cơ sở dữ liệu ứng dụng Django là gì?

Ngay bây giờ kế hoạch của tôi là tạo ra file XML của mặt hàng bò với Scrapy của XMLItemExporter (docs here), và sử dụng những để loaddata vào dự án Django như đồ đạc XML (docs here). Điều này có vẻ không sao bởi vì nếu một trong hai quy trình này có trục trặc, thì có một tập trung trung gian giữa chúng. Modularizing ứng dụng như một toàn thể cũng không có vẻ giống như một ý tưởng tồi.

Một số mối quan tâm là:

  • Đó những tập tin này có thể là quá lớn để đọc vào bộ nhớ cho Django loaddata.
  • Điều đó tôi dành quá nhiều thời gian cho việc này khi có thể có giải pháp tốt hơn hoặc dễ dàng hơn, chẳng hạn như xuất trực tiếp vào cơ sở dữ liệu, đó là MySQL trong trường hợp này.
  • Không ai có vẻ đã viết về quy trình này trực tuyến, điều này thật lạ khi xem xét Scrapy là một khuôn khổ tuyệt vời để cắm vào ứng dụng Django theo ý kiến ​​của tôi.
  • Không có hướng dẫn dứt khoát về việc tạo đồ đạc Django theo cách thủ công trên tài liệu của Django - có vẻ như nó hướng đến việc bán phá giá và tải lại đồ đạc từ chính ứng dụng.

Sự tồn tại của thử nghiệm DjangoItem cho thấy rằng Scrapy + Django là lựa chọn đủ phổ biến để có giải pháp tốt ở đây.

Tôi rất cảm kích mọi giải pháp, lời khuyên hoặc sự khôn ngoan về vấn đề này.

Trả lời

1

Câu hỏi này là một chút cũ đã có, nhưng tôi hiện đang đối phó với hội nhập đúng đắn của Django + Scrapy là tốt. Công việc của tôi là như sau: Tôi đã thiết lập Scrapy như một lệnh quản lý Django như mô tả in this answer. Sau đó, tôi chỉ đơn giản là viết một đường ống dẫn sơ sài để lưu một mục được cạo vào cơ sở dữ liệu của Django bằng cách sử dụng các phương thức QuerySet của Django. Đó là tất cả. Tôi hiện đang sử dụng SQLite cho cơ sở dữ liệu và nó hoạt động như một sự quyến rũ. Có lẽ điều này vẫn hữu ích cho ai đó.

1

Bạn có thể sử dụng django-dynamic-scraper để tạo và quản lý scrapers Scrapy dễ dàng truy cập vào các mô hình Django. Cho đến nay tôi đã không chạy vào bất kỳ vấn đề mà nó không thể giải quyết mà Scrapy không thể giải quyết.

Django-dynamic-scraper documentation