2009-07-18 28 views
22

Tôi đang cố tạo một trình phân tích cú pháp HTML tổng quát hoạt động tốt trên các Bài đăng trên blog. Tôi muốn chỉ trình phân tích cú pháp của tôi tại URL của entrie cụ thể và lấy lại văn bản sạch của bài đăng. Cách tiếp cận cơ bản của tôi (từ python) đã được sử dụng một sự kết hợp của BeautifulSoup/Urllib2, đó là okay, nhưng nó giả định bạn biết các thẻ thích hợp cho các mục blog. Có ai có ý tưởng nào tốt hơn không?Tạo trình phân tích cú pháp tuyệt vời - Trích xuất văn bản có liên quan từ HTML/Blogs

Dưới đây là một số suy nghĩ có thể ai đó có thể mở rộng, rằng tôi chưa có đủ kiến ​​thức/bí quyết để thực hiện.

  1. Chương trình Unix 'lynx' dường như phân tích các bài đăng trên blog đặc biệt tốt - họ sử dụng trình phân tích cú pháp nào hoặc làm cách nào để sử dụng?

  2. Có bất kỳ dịch vụ/trình phân tích cú pháp nào tự động xóa quảng cáo rác không?

  3. Trong trường hợp này, tôi có một ý niệm mơ hồ rằng có thể giả định rằng các bài đăng trên blog thường được chứa trong một thẻ xác định nhất định với class = "entry" hoặc tương tự. Do đó, có thể tạo một thuật toán tìm thấy các thẻ kèm theo với văn bản rõ ràng nhất giữa chúng - bất kỳ ý tưởng nào về điều này?

Cảm ơn!

+1

Lynx sử dụng trình phân tích cú pháp thẻ của riêng mình. Mã nguồn có sẵn. – Quentin

Trả lời

24

Boy, tôi có giải pháp hoàn hảo cho bạn không.

Thuật toán khả năng đọc của Arc90 thực hiện chính xác điều này. Với nội dung HTML, nó chọn nội dung của bài đăng trên blog chính, bỏ qua tiêu đề, chân trang, điều hướng, v.v.

Dưới đây là triển khai trong:

Tôi sẽ phát hành một cổng Perl cho CPAN trong một vài ngày. Xong.

Hy vọng điều này sẽ hữu ích!

+0

Nó chỉ ra điều này làm việc thực sự tốt - cần thiết để thực hiện một vài thay đổi để làm cho nó tốt hơn (thay đổi để phân tích cú pháp SGML thay vì HTMLParser trong beautifulsoup), nhưng những gì một giải pháp tuyệt vời! Cảm ơn –

+0

Một lưu ý nhanh: Công cụ Readability của Arc90 có một số điểm yếu. Trên một trang phức tạp như thế này (http://blog.moertel.com/articles/2007/02/22/a-simple-directory-tree-printer-in-haskell), nó âm thầm giảm hầu hết các khối mã. Đó là một vấn đề quan trọng nếu bạn định sử dụng nó để trích xuất thông tin từ các blog _coding_. – Telemachus

+0

Cảm ơn các liên kết python và php, tôi không biết những gì đã tồn tại. –

3

Có các dự án ở đó cụ thể xem xét lọc ra 'tiếng ồn' của một trang nhất định. Thông thường, cách này được thực hiện bằng cách đưa ra thuật toán một vài ví dụ về một loại trang nhất định và có thể xem những phần nào không thay đổi giữa chúng. Điều đó đang được nói, bạn phải cung cấp cho thuật toán một vài trang mẫu/bài đăng của mỗi blog bạn muốn phân tích cú pháp. Điều này thường hoạt động tốt khi bạn có một nhóm nhỏ các trang web được xác định mà bạn sẽ thu thập thông tin (ví dụ: các trang web tin tức). Thuật toán về cơ bản là phát hiện mẫu chúng sử dụng trong HTML và chọn ra phần thú vị. Không có ma thuật ở đây, nó là khó khăn và không hoàn hảo.

Một ví dụ tuyệt vời về alogrithm này có thể được tìm thấy trong mã nguồn EveryBlock.com vốn chỉ có nguồn mở. Truy cập everyblock.com/code và tải xuống gói "ebdata" và xem mô-đun "trình tạo khuôn mẫu".

Và tôi không có ý nói rõ ràng, nhưng bạn đã xem xét việc chỉ sử dụng RSS từ các blog được đề cập? Thông thường, các trường có toàn bộ bài đăng trên blog, tiêu đề và các thông tin meta khác cùng với chúng. Sử dụng RSS sẽ đơn giản hơn nhiều so với giải pháp trước đây mà tôi đã đề cập.

+0

Vâng tôi thực sự có dữ liệu RSS, vấn đề là nhiều người không có toàn văn, và tôi cần nó trong mọi trường hợp. Kiểm tra này ra ngay bây giờ, cảm ơn. –

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