2008-10-15 37 views
12

Phương pháp tốt nhất để loại bỏ một trang web động nơi phần lớn nội dung được tạo bởi những gì dường như là yêu cầu ajax? Tôi có kinh nghiệm trước đó với một cơ chế, BeautifulSoup, và kết hợp python, nhưng tôi đang cho một cái gì đó mới.Cạo một trang web động

--Chỉnh sửa-- Để biết thêm chi tiết: Tôi đang cố gắng cạo CNN primary database. Có rất nhiều thông tin ở đó, nhưng dường như không phải là một api.

Trả lời

7

Đây là một vấn đề khó khăn vì bạn phải thiết kế ngược javascript trên cơ sở từng trang, hoặc triển khai động cơ javascript và chạy tập lệnh (có những khó khăn và cạm bẫy riêng).

Đó là một giải pháp trọng lượng nặng, nhưng tôi đã thấy mọi người làm điều này với các tập lệnh viết tắt - cho phép Firefox hiển thị mọi thứ và chạy javascript, sau đó cạo các phần tử. Bạn thậm chí có thể bắt đầu hành động của người dùng trên trang nếu cần.

-Adam

3

lời khuyên Adam Davis là rắn. Tôi cũng khuyên bạn nên cố gắng "đảo ngược-kỹ sư" những gì JavaScript đang làm, và thay vì cố gắng để cạo trang, bạn đưa ra các yêu cầu HTTP mà JavaScript đang phát hành và tự giải thích kết quả (rất có thể là ở định dạng JSON, đẹp và dễ phân tích cú pháp). Chiến lược này có thể là bất cứ điều gì từ tầm thường đến một cơn ác mộng, tùy thuộc vào độ phức tạp của JavaScript.

Khả năng tốt nhất, tất nhiên, là thuyết phục người duy trì trang web triển khai API thân thiện với nhà phát triển. Tất cả những đứa trẻ tuyệt vời đều làm những điều này 8-) Tất nhiên, chúng có thể không muốn dữ liệu của chúng được cạo theo kiểu tự động ... trong trường hợp này bạn có thể mong đợi một trò chơi làm cho trang của chúng trở nên khó khăn hơn :-(

0

Điều này có vẻ như đó là vấn đề khá phổ biến.Tôi tự hỏi tại sao một người không có ai phát triển trình duyệt có lập trình? Tôi đang hình dung một Firefox bạn có thể gọi từ dòng lệnh với URL làm đối số và sẽ tải trang, chạy tất cả các sự kiện JS tải trang ban đầu và lưu các tập tin kết quả.

Ý tôi là Firefox và các trình duyệt khác đã làm điều này, tại sao chúng ta không thể chỉ đơn giản là cởi những thứ UI?

+2

mọi người đã thực hiện việc này với webkit, ví dụ tại đây: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/comment-page- 1 – hoju

4

Se lenium IDE, một công cụ để thử nghiệm, là một cái gì đó tôi đã sử dụng cho rất nhiều màn hình cạo. Có một vài điều nó không xử lý tốt (cửa sổ Javascript window.alert() và cửa sổ bật lên nói chung), nhưng nó hoạt động trên một trang bằng cách thực sự kích hoạt các sự kiện bấm và gõ vào các hộp văn bản. Vì phần IDE chạy trong Firefox, bạn không phải thực hiện tất cả các phiên quản lý, v.v. vì Firefox sẽ xử lý nó. Bản ghi IDE và phát thử nghiệm trở lại.

Nó cũng xuất mã C#, PHP, Java, v.v. để xây dựng các thử nghiệm/đoạn trích được biên dịch được thực thi trên máy chủ Selenium. Tôi đã làm điều đó cho hơn một vài kịch bản Selenium của tôi, điều này làm cho những thứ như lưu trữ dữ liệu đã được cạo trong cơ sở dữ liệu dễ dàng hơn nhiều.

Kịch bản khá đơn giản để viết và thay đổi, được tạo thành từ những thứ như ("clickAndWait", "submitButton"). Đáng xem một cái nhìn cho những gì bạn đang mô tả.

7

Giải pháp tốt nhất mà tôi tìm thấy là sử dụng Firebug để giám sát XmlHttpRequests và sau đó sử dụng tập lệnh để gửi lại chúng.

1

Có lẽ cách dễ nhất là sử dụng điều khiển trình duyệt web của IE trong C# (hoặc bất kỳ ngôn ngữ nào khác).Bạn có quyền truy cập vào tất cả nội dung bên trong trình duyệt ngoài hộp + bạn không cần phải quan tâm đến cookie, SSL và v.v.

2

Có một chút đường cong học tập, nhưng các công cụ như Pamie (Python) hoặc Watir (Ruby) sẽ cho phép bạn chốt vào trình duyệt web IE và nhận các phần tử. Điều này hóa ra lại dễ hơn Cơ chế và các công cụ cấp HTTP khác vì bạn không phải giả lập trình duyệt, bạn chỉ cần hỏi trình duyệt cho các phần tử html. Và nó sẽ dễ dàng hơn so với kỹ thuật đảo ngược các cuộc gọi Javascript/Ajax. Nếu cần, bạn cũng có thể sử dụng các công cụ như súp ngon cùng với Pamie.

1

tôi thấy trình điều khiển IE Webbrowser có tất cả các loại quirks và cách giải quyết một số phần mềm chất lượng cao để xử lý tất cả những mâu thuẫn đó, được phân lớp xung quanh shvwdoc.dll api và mshtml và cung cấp một khung.

0

Câu hỏi đầu tiên tôi có: bạn có thể xác nhận rằng trang web hoàn toàn không hoạt động nếu không có Javascript không? Bạn sẽ ngạc nhiên khi có bao nhiêu trang web vẫn có thể sử dụng được nếu bạn tắt javascript. Có thể bạn sẽ được chuyển hướng tới một tập hợp url hơi khác một chút.

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