【问题标题】:R 3.1.1 (32-bit): htmlParse() mess up hebrew texts, OS: Win 7R 3.1.1(32 位):htmlParse() 弄乱了希伯来语文本,操作系统:Win 7
【发布时间】:2014-10-16 06:08:47
【问题描述】:

尝试解析希伯来语 .HTML 网页,但为此目的使用 RCurl 工具时遇到问题。我一直在阅读以下内容:

我使用了以下 R 代码:

library(XML)
library(RCurl)
url_get<-"http://www.agora.co.il/toGet.asp?searchType=searchAll&amp;dealType=1&amp;dealStatus=1"
download.file(url_get, "codes/tmp.html")
txt <- readLines("codes/tmp.html", encoding="UTF-8")
pagetree <- htmlParse(txt, useInternalNodes = TRUE, encoding="UTF-8")

而 readLines() 产生正确的希伯来语(בעלי מקצוע);

 txt[345]
[1] "<a id=\"professionals\" href=\"/texts/midrag.asp?parameter=\" target=\"_blank\" title=\"בעלי מקצוע\">"

htmlParse() 搞砸了(׳•׳— ׳—׳₪׳¦׳™ ׳™׳“ ׳©׳ ׳™׳” ׳׳׳¡׳™׳¨׳” ׳'׳ —׳™׳ ׳ ׳'׳׳'׳“)。

    <a href="http://shlah.agora.co.il/financial/financial1.html">׳׳¦׳׳× ׳׳”׳׳™׳ ׳•׳¡</a><br><br><span class="linkWords">׳׳•׳— ׳—׳₪׳¦׳™ ׳™׳“ ׳©׳ ׳™׳” ׳׳׳¡׳™׳¨׳” ׳‘׳—׳™׳ ׳ ׳‘׳׳‘׳“ -

有什么想法吗?

sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Hebrew_Israel.1255  LC_CTYPE=Hebrew_Israel.1255    LC_MONETARY=Hebrew_Israel.1255
[4] LC_NUMERIC=C                   LC_TIME=Hebrew_Israel.1255    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RCurl_1.95-4.3 bitops_1.0-6   XML_3.98-1.1  

loaded via a namespace (and not attached):
[1] tools_3.1.1

【问题讨论】:

  • 您从哪个网址下载文件?没有它,就不可能重现您的问题。
  • @hadley 你是对的。谢谢。我已将 URL 编辑到代码中。

标签: r encoding html-parsing hebrew rcurl


【解决方案1】:

我无法重现您的问题。以下是我采取的步骤:

  1. 首先尝试一个非常简单的 HTML 5 文档:

    library(XML)
    
    # This is the simplest valid HTML-5
    # http://www.brucelawson.co.uk/2010/a-minimal-html5-document/
    hebrew1 <- "
      <!doctype html>
      <title>בעלי מקצו</title>
    "
    
    htmlParse(hebrew1) # NOT OK
    #> <!DOCTYPE html>
    #> <html><head><title>××¢×× ×קצ×</title></head></html>
    #> 
    htmlParse(hebrew1, encoding = "UTF-8") # OK
    #> <!DOCTYPE html>
    #> <html><head><title>בעלי מקצו</title></head></html>
    #> 
    
    hebrew2 <- "
      <!doctype html>
      <meta charset=utf-8>
      <title>בעלי מקצו</title>
    "
    htmlParse(hebrew2) # OK
    #> <!DOCTYPE html>
    #> <html><head>
    #> <meta charset="utf-8">
    #> <title>בעלי מקצו</title>
    #> </head></html>
    #> 
    
  2. 直接从 URL 尝试:

    url <- "http://www.agora.co.il/toGet.asp?searchType=searchAll&amp;dealType=1&amp;dealStatus=1"
    html <- htmlParse(url, encoding = "UTF-8")
    XML::getNodeSet(html, "//a")[[1]]
    #> <a href="/signIn.asp?source=signIn">התחבר/י</a>
    
  3. 从磁盘加载:

    tmp <- tempfile()
    download.file(url, tmp)
    html <- htmlParse(tmp, encoding = "UTF-8")
    XML::getNodeSet(html, "//a")[[1]]
    #> <a href="/signIn.asp?source=signIn">התחבר/י</a>
    
  4. 从行加载

    lines <- readLines(tmp)
    html <- htmlParse(lines, encoding = "UTF-8")
    XML::getNodeSet(html, "//a")[[1]]
    #> <a href="/signIn.asp?source=signIn">התחבר/י</a>
    

【讨论】:

  • 谢谢@hadley 成功了。然而,我发现很奇怪的是,非常简单的 HTML-5 示例不起作用,并且把语言弄乱了,而其他的却起作用了。我完全使用您提供的代码。此外,当我从其他方法打印 htmlParse 文件时,它仍然会弄乱文本;只有使用XML::getNodeSet(html,"//a")[[1]] 希伯来语似乎运作良好有人知道为什么吗?
  • @dof1985 我怀疑这只是一个打印问题。这两件事的类别不同,因此它们可能具有不同的打印方法,并且可能其中一个存在错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2013-08-29
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
相关资源
最近更新 更多