2013-09-30 18 views
5

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

  1. 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
  2. Một số các trang cư dữ liệu thông qua ajax sau khi trang được tải.
  3. Webstack của tôi là Ruby/Rails với MySql, v.v.
  4. 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

  1. 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).
  2. 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 đó.

+0

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 đó. –

+0

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) –

+0

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 đó. –

Trả lời

1

Nếu tốc độ quan trọng, bạn có thể sử dụng đá quý watir-webdriver để lái PhantomJS (trình duyệt không đầu có hỗ trợ JavaScript). Mở bất kỳ trang nào trong PhantomJS và nếu watir-webdriver quá chậm để lấy dữ liệu ra khỏi trang đó, bạn có thể chuyển HTML được hiển thị đến Nokogiri.

Read more:

+0

vẫn đọc trên các liên kết bạn đã đề cập. liên kết cuối cùng dẫn đến một miền hết hạn, bạn nên gia hạn nó. –

+0

liên kết đã được sao lưu ngay –

+0

Đã kết thúc bằng cách sử dụng watir-webdriver + nokogiri, mặc dù không phải là đá quý, vì tôi thích một số tính linh hoạt cho tương lai. –

1

Bạn nên kiểm tra hướng dẫn này Making AJAX Applications Crawlable xuất bản bởi Google, nó thảo luận về AJAX bò chương trình mà một số hỗ trợ trang web.

Bạn muốn tìm #! trong đoạn băm của URL, điều này cho biết trình thu thập thông tin trang web hỗ trợ lược đồ thu thập dữ liệu AJAX và máy chủ sẽ trả lại ảnh chụp nhanh HTML của trang khi URL được sửa đổi một chút.

Full Specification

+1

Cảm ơn bạn đã hướng dẫn (sẽ giúp tôi nếu tôi xây dựng các ứng dụng được hỗ trợ ajax mà tôi muốn được tìm kiếm bởi google). Rất tiếc, không phải tất cả các trang web mục tiêu của tôi đều tuân theo điều này. –

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