2012-01-10 36 views
5

Những gì tôi làm là:
- thu thập dữ liệu trang
- lấy tất cả các liên kết của trang, đặt chúng trong một danh sách
- bắt đầu một trình thu thập mới, mà đến thăm mỗi liên kết của danh sách
- tải chúng
Tôi làm cách nào để tải xuống tất cả các liên kết từ một trang nhanh hơn?

Phải có cách nhanh hơn, nơi tôi có thể tải xuống các liên kết trực tiếp khi tôi truy cập trang? Cám ơn!

Trả lời

6

crawler4j sẽ tự động thực hiện quy trình này cho bạn. Trước tiên, bạn thêm một hoặc nhiều trang hạt giống. Đây là những trang được tìm nạp và xử lý lần đầu tiên. crawler4j sau đó trích xuất tất cả các liên kết trong các trang này và chuyển chúng đến hàm shouldVisit của bạn. Nếu bạn thực sự muốn thu thập dữ liệu tất cả chúng, hàm này sẽ chỉ trả về true trên tất cả các hàm. Nếu bạn chỉ muốn thu thập thông tin các trang trong một tên miền cụ thể, bạn có thể kiểm tra URL và trả về true hoặc false dựa trên đó.

Các URL mà shouldVisit của bạn trả về true, sau đó được tìm nạp bởi các chuỗi trình thu thập thông tin và quá trình tương tự được thực hiện trên chúng.

Mã ví dụ here là mẫu tốt để bắt đầu.

+0

Điều đó hoàn hảo, cảm ơn bạn! – seinecle

2

Cách tiếp cận chung là tách riêng việc thu thập thông tin và tải xuống các chủ đề riêng biệt, với số lượng Chủ đề tối đa, tùy thuộc vào yêu cầu bộ nhớ của bạn (nghĩa là RAM tối đa bạn muốn sử dụng để lưu trữ tất cả thông tin này).

Tuy nhiên, crawler4j đã cung cấp cho bạn chức năng này. Bằng cách chia nhỏ tải xuống và thu thập thông tin vào các Chủ đề riêng biệt, bạn cố gắng tối đa hóa việc sử dụng kết nối của mình, kéo xuống càng nhiều dữ liệu vì cả kết nối của bạn đều có thể xử lý và máy chủ cung cấp thông tin có thể gửi cho bạn. Giới hạn tự nhiên cho điều này là, ngay cả khi bạn sinh ra 1.000 Chủ đề, nếu các máy chủ chỉ được cung cấp cho bạn nội dung ở 0,3k mỗi giây, thì vẫn chỉ có 300 KB mỗi giây mà bạn sẽ tải xuống. Nhưng bạn không thể kiểm soát được khía cạnh đó, tôi sợ. Một cách khác để tăng tốc độ là chạy trình thu thập thông tin trên hệ thống có đường ống tải lên internet, vì tốc độ tải xuống tối đa của bạn là, tôi đoán, yếu tố hạn chế về tốc độ bạn có thể nhận dữ liệu hiện tại là bao nhiêu . Ví dụ: nếu bạn đang chạy thu thập dữ liệu trên một phiên bản AWS (hoặc bất kỳ nền tảng ứng dụng đám mây nào), bạn sẽ được hưởng lợi từ kết nối tốc độ cực cao của chúng tới xương sống và rút ngắn thời gian thu thập thông tin có hiệu quả mở rộng băng thông của bạn vượt xa những gì bạn sẽ nhận được tại một kết nối nhà hoặc văn phòng (trừ khi bạn làm việc tại một ISP, đó là). Về mặt lý thuyết, trong trường hợp ống của bạn cực kỳ lớn, giới hạn bắt đầu trở thành tốc độ ghi tối đa của đĩa, cho bất kỳ dữ liệu nào bạn đang lưu vào bộ nhớ đĩa cục bộ (hoặc mạng).

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