Tôi cần phải xóa các trang nghề nghiệp của nhiều công ty (với sự cho phép của họ).Cạo các trang web đã bật ajax
yếu tố quan trọng trong việc quyết định những gì để tôi sử dụng
- tôi sẽ cạo khoảng 2000 trang hàng ngày, vì vậy cần một giải pháp decently nhanh
- Một số các trang cư dữ liệu thông qua ajax sau khi trang được tải.
- Webstack của tôi là Ruby/Rails với MySql, v.v.
- Tôi đã viết scrapers trước đó bằng cách sử dụng scrapy (python) (+ Selenium cho các trang đã bật ajax).
nghi ngờ của tôi
- Tôi đang bối rối không biết nên đi với python (tức scrapy + Selenium, tôi nghĩ rằng đây là giải pháp thay thế tốt nhất trong python), hoặc thay vì thích một cái gì đó trong ruby (như toàn bộ của tôi codebase có trong ruby).
- Scrapy + selenium thường chậm, có lựa chọn thay thế nhanh hơn trong ruby không? (Điều này sẽ làm cho quyết định dễ dàng hơn) Thay thế Ruby phổ biến nhất với hỗ trợ cho các trang Ajax Loaded có vẻ là Watir Ai có thể bình luận về tốc độ của nó. Cũng đang có bất kỳ lựa chọn thay thế ruby khác (ví dụ mechanize/Nokogiri + cái gì khác cho Ajax Loaded trang)
EDIT
Đã kết thúc bằng watir-webdriver + Nokogiri, để tôi có thể tận dụng lợi thế của bản ghi hoạt động trong khi lưu trữ dữ liệu. Nokogiri nhanh hơn nhiều so với Watir-webdriver khi trích xuất dữ liệu.
Phế liệu sẽ nhanh hơn, nhưng sự cân bằng tốc độ không đáng kể như sự cân bằng phức tạp trong việc xử lý các loại trang web khác nhau trong các trang web mục tiêu, mà tôi nhất thiết phải trải qua) .
Hy vọng điều này sẽ giúp ai đó.
này có thể không phù hợp với trường hợp sử dụng của bạn, nhưng đối với các trang web có mechanize/Nokogiri AJAX, những gì bạn có thể làm là làm mới trang mà mỗi 5-10 giây. Mặc dù nó không phải là lý tưởng và tùy thuộc vào tần số bạn yêu cầu, bạn có thể nhận được bất kỳ dữ liệu nào được tải thông qua các cuộc gọi JS đó. –
Tôi không hoàn toàn chắc chắn những gì bạn đang nói là đúng. Tôi nghĩ rằng cơ giới hóa/Nokogiri không có phiên dịch javascript (http://stackoverflow.com/questions/3852678/can-mechanize-read-ajax-ruby) –
Họ không, nhưng ngay cả khi dữ liệu được đẩy vào một bảng sau một khoảng thời gian . Miễn là dữ liệu đó được duy trì trong bảng, nếu bạn chỉ cần lấy lại trang, bạn sẽ có thể xóa nó. Bạn chỉ cần xác minh từ trình duyệt, rằng sau khi dữ liệu của trang được điền thông qua AJAX rằng nếu làm mới trang, dữ liệu vẫn ở đó. Đó là điều bạn có thể sử dụng Mechanize/Nokogiri để loại bỏ, nhưng bạn cần phải tải lại trang đó. –