2008-09-01 19 views

Trả lời

39

Sử dụng lxml là thư viện xml/html tốt nhất cho python.

import lxml.html 
t = lxml.html.fromstring("...") 
t.text_content() 

Và nếu bạn chỉ muốn để khử trùng giao diện html tại module

4

Làm cách nào phân tích cú pháp dữ liệu HTML và trích xuất dữ liệu với sự trợ giúp của trình phân tích cú pháp?

Tôi muốn thử một cái gì đó giống như tác giả mô tả trong chapter 8.3 in the Dive Into Python book

6

khi tôi đồng ý với Lucas rằng biểu thức thông thường không phải là tất cả những gì đáng sợ, tôi vẫn nghĩ rằng bạn nên đi với một phân tích cú pháp HTML chuyên ngành. Điều này là do tiêu chuẩn HTML đủ lông (đặc biệt nếu bạn muốn phân tích các trang "HTML" tùy ý được lấy ra khỏi Internet) mà bạn cần phải viết nhiều mã để xử lý các trường hợp góc. Có vẻ như là python includes one out of the box.

Bạn cũng nên xem python bindings for TidyLib để có thể xóa HTML bị hỏng, làm cho tỷ lệ thành công của bất kỳ phân tích cú pháp HTML nào cao hơn nhiều.

1

Bạn có thể cần điều gì đó phức tạp hơn biểu thức chính quy. các trang web thường có dấu ngoặc nhọn mà không phải là một phần của thẻ, như thế này:

<div>5 < 7</div> 

Tước thẻ với regex sẽ trả về chuỗi "5" và đối xử với

< 7</div> 

như một thẻ đơn và loại bỏ nó ra.

Tôi khuyên bạn nên tìm kiếm mã đã viết để thực hiện điều này cho bạn. Tôi đã tìm kiếm và tìm thấy điều này: http://zesty.ca/python/scrape.html Nó cũng có thể giải quyết các thực thể HTML.

15

Sử dụng BeautifulSoup! Đó là hoàn hảo cho điều này, nơi bạn có đánh dấu đến của đức tính đáng ngờ và cần phải nhận được một cái gì đó hợp lý ra khỏi nó. Chỉ cần vượt qua trong văn bản gốc, trích xuất tất cả các thẻ chuỗi và tham gia chúng.

+9

và mã để làm điều đó sẽ là: '' .join (BeautifulSoup (giá trị, conversionEntities = BeautifulSoup.HTML_ENTITIES) .findAll (text = True)) –

0

Regular expressions lxml.html.clean không đáng sợ, nhưng viết regexes của riêng bạn để dải HTML là một con đường chắc chắn điên rồ (và nó cũng không hoạt động). Đi theo con đường của sự khôn ngoan, và sử dụng một trong nhiều thư viện phân tích cú pháp HTML tốt.

Ví dụ của Lucas cũng bị hỏng vì "phụ" không phải là phương thức của chuỗi Python. Bạn sẽ phải "nhập lại", sau đó gọi re.sub (pattern, repl, string). Nhưng đó không phải là ở đây cũng không có, như câu trả lời đúng cho câu hỏi của bạn không liên quan đến việc viết bất kỳ regexes.

0

Nhìn vào số lượng người có ý nghĩa đang thể hiện trong các câu trả lời khác ở đây, tôi muốn nói rằng việc sử dụng regex có lẽ không phải là ý tưởng tốt nhất cho tình huống của bạn. Hãy tìm một cái gì đó đã thử và thử nghiệm, và đối xử với câu trả lời trước đây của tôi như là một minh chứng rằng regexes không cần phải là rằng đáng sợ.

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