我想知道rvest
包中是否有意这种行为。当rvest
看到<
字符时,它会停止阅读HTML。
library(rvest)
read_html("<html><title>under 30 years = < 30 years <title></html>")
打印:
[1] <head>\n <title>under 30 = </title>\n</head>
如果这是故意的,是否有解决方法?
答案 0 :(得分:3)
是的,rvest
是正常的,因为它对于html来说是正常的。
请参阅w3schools HTML Entities页面。 <
和>
是html中的保留字符,其文字值必须以另一种方式编写,作为特定字符实体。这是链接页面中的实体表,给出了一些常用的html字符及其各自的html实体。
XML::readHTMLTable("http://www.w3schools.com/html/html_entities.asp", which = 2)
# Result Description Entity Name Entity Number
# 1 non-breaking space  
# 2 < less than < <
# 3 > greater than > >
# 4 & ampersand & &
# 5 ¢ cent ¢ ¢
# 6 £ pound £ £
# 7 ¥ yen ¥ ¥
# 8 € euro € €
# 9 © copyright © ©
# 10 ® registered trademark ® ®
因此,如果不是太多,您可能必须使用gsub()
或手动替换这些值。您可以看到,当这些字符被正确的实体替换时,它将正确解析。
library(XML)
doc <- htmlParse("<html><title>under 30 years = < 30 years </title></html>")
xmlValue(doc["//title"][[1]])
# [1] "under 30 years = < 30 years "
您可以使用gsub()
,如下所示
txt <- "<html><title>under 30 years = < 30 years </title></html>"
xmlValue(htmlParse(gsub(" < ", " < ", txt, fixed = TRUE))["//title"][[1]])
# [1] "under 30 years = < 30 years "
我在这里使用了 XML 包,但这同样适用于处理html的其他包。