Tôi đã giải quyết vấn đề này trong quá khứ.
Để biết dữ liệu lịch sử giá, tôi đã sử dụng API của yahoo. Khi tôi nói API, tôi có nghĩa là tôi đã thực hiện yêu cầu HTTP nhận tệp CSV về dữ liệu lịch sử giá. Thật không may, điều đó chỉ mang lại cho bạn dữ liệu cho một công ty tại một thời điểm, trong một khoảng thời gian bạn chỉ định. Vì vậy, trước tiên tôi đã tạo danh sách tất cả các biểu tượng ticker và lặp lại điều đó, gọi API của yahoo cho mỗi. Bạn cũng có thể tìm thấy một trang web liệt kê các biểu tượng ticker và chỉ định kỳ tải xuống danh sách đó.
Thực hiện việc này quá thường xuyên và quá nhanh và trang web của họ có thể chặn bạn. Tôi đã thêm một số mã để giới hạn tần suất tôi thực hiện các yêu cầu http. Tôi cũng đã lưu giữ dữ liệu của mình vì vậy tôi sẽ không phải lấy lại dữ liệu đó nữa. Tôi sẽ luôn duy trì hình thức dữ liệu thô/chưa qua chế biến, mã của bạn có thể thay đổi theo cách khiến việc sử dụng bất kỳ thứ gì khác khó khăn hơn. Avro/tiết kiệm có thể là một ngoại lệ, kể từ khi sự tiến triển lược đồ hỗ trợ.
Đối với các loại dữ liệu khác, bạn có thể không có bất kỳ API nào cung cấp cho bạn các tệp CSV đẹp. Tôi đã phải đối phó với vấn đề đó nhiều lần. Đây là lời khuyên của tôi.
Đôi khi một trang web gọi một dịch vụ web an toàn sau hậu trường, bạn có thể khám phá ra rằng bằng cách sử dụng firebug. Đôi khi nó cũng sẽ yêu cầu các tiêu đề nhất định, mà bạn cũng có thể khám phá bằng cách sử dụng firebug.
Nếu bạn buộc phải làm việc với HTML, có một số thư viện java có thể giúp bạn. apache.commons.http là một thư viện mà bạn có thể sử dụng để dễ dàng thực hiện các yêu cầu http và xử lý các phản hồi của chúng. Google cũng có một hòm http khách hàng, có lẽ điều tra đáng giá.
JSoup API tuyệt vời khi phân tích cú pháp dữ liệu HTML, ngay cả khi nó được định dạng kém và không phải XHTML. Nó cũng hoạt động với XML. Thay vì duyệt qua hoặc truy cập các nút trong hệ thống phân cấp jsoup, hãy tìm hiểu XPath và sử dụng nó để chọn những gì bạn muốn. Trang web có thể định kỳ thay đổi định dạng trang web của trang web, điều đó sẽ dễ dàng đối phó và khắc phục nếu bạn đang sử dụng JSoup và khó khăn để đối phó với cách khác.
Nếu bạn phải làm việc với JSON, hãy sử dụng thư viện Jackson để phân tích cú pháp đó.
Nếu bạn phải làm việc với CSV, hãy sử dụng thư viện OpenCSV để phân tích cú pháp và xử lý nó.
Ngoài ra, luôn lưu trữ dữ liệu trong phần thô và tránh thực hiện các yêu cầu HTTP không cần thiết để bạn không bị chặn. Tôi đã bị chặn bởi google tài chính một vài lần, họ có thể làm điều đó. May mắn thay khối không hết hạn. Bạn thậm chí có thể muốn thêm khoảng thời gian chờ ngẫu nhiên giữa các yêu cầu.
Cảm ơn. Có cách nào có lập trình không? – Kunal
Nó sẽ là khá tầm thường để viết một phân tích cú pháp để trích xuất dữ liệu từ html. – Joel
@Jelel: thậm chí còn dễ dàng hơn cho một CSV. –