2013-11-02 14 views
7

Tôi muốn đọc tệp HTML từ trang web. Cụ thể, tôi muốn đọc sách ở định dạng HTML từ gutenberg.org. Tiêu đề của mỗi chương được đánh dấu bằng thẻ "h2" và nội dung của mỗi chương sau trong các thẻ đoạn "p" sau "h2". Sử dụng gói XML Tôi có thể nhận được các giá trị hoặc mã HTML đầy đủ cho mỗi thẻ.Phân tích tệp HTML trong R

Dưới đây là một số mẫu mã sử dụng Middlemarch George Elliot:

library(XML) 

doc.html = htmlTreeParse('http://www.gutenberg.org/files/145/145-h/145-h.htm', 
         useInternal = TRUE) 
doc.value <- xpathApply(doc.html, '//h2|//p', xmlValue) 
doc.html.value <- xpathApply(doc.html, '//h2|//p') 

doc.value chứa một danh sách trong đó mỗi phần tử là nội dung của các thẻ nhưng tôi không thể biết liệu là một thẻ h2 hoặc p thẻ. Mặt khác, doc.html.value chứa danh sách có mã html cho mỗi thẻ. Điều này mang lại cho tôi thông tin cho dù đó là một thẻ "h2" hoặc "p" nhưng nó cũng chứa rất nhiều mã phụ (như thông tin phong cách, v.v) mà tôi không cần.

Câu hỏi của tôi: Có cách nào đơn giản để chỉ lấy loại thẻ và giá trị của thẻ mà không có thông tin khác liên kết với thẻ không?

Trả lời

5

Xem tài liệu cho xmlValue gợi ý rằng có một hàm khác theo tên của xmlName, chỉ trích xuất tên của thẻ. Sử dụng hai giá trị này, những gì bạn muốn có thể được tính toán:

doc.html.name.value <- xpathApply(doc.html, '//h2|//p', function(x) { list(name=xmlName(x), content=xmlValue(x)); }) 

> doc.html.name.value[[1]] 
$name 
[1] "h2" 

$content 
[1] "\r\nGeorge Eliot\r\n" 
Các vấn đề liên quan