【问题标题】:string equals false although it's true字符串等于假,虽然它是真的
【发布时间】:2017-05-08 02:54:32
【问题描述】:

我现在正在使用 Rstudio 作为网络爬虫。但我有一个问题。

page_html <- read_html("http://competitie.vttl.be/index.php?menu=6&sel=36665&result=1&category=1")

> page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nth-child(3).DBTable_first") %>% html_text()
[1] "A [+]"
> identical((page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nthchild(3) .DBTable_first") %>% html_text()),"A [+]")
[1] FALSE
> page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nth-child(4).DBTable_first") %>% html_text()
[1] "B0"
> identical((page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nthchild(4) .DBTable_first") %>% html_text()),"B0")
[1] TRUE

A [+] 总是返回 false,我不知道为什么。我将它与使用完全相同的方法返回 true 的其他人进行了比较。有谁知道如何解决这个问题?

【问题讨论】:

  • 建议你发布一个完整的例子。
  • 好吧,我猜这就是完整的例子。这是我用于此 URL 的代码:page_html competitie.vttl.be/…)。我之前发布的代码应该适用于测试。
  • 运行代码的第一行会得到Error in open.connection(x, "rb") : HTTP error 404. 所以看起来页面不再存在?
  • 你是对的,复制那个链接出了点问题,它现在应该可以工作了!
  • 这行得通,但是运行你的第二行会给我character(0)

标签: r


【解决方案1】:

网页使用 UTF-8 编码,这似乎是导致问题的原因。

library(rvest)
page_html <- read_html("http://competitie.vttl.be/index.php?menu=6&sel=36665&result=1&category=1")
grade <- page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nth-child(3) .DBTable_first") %>% html_text()
grade
[1] "A [+]"
Encoding(grade)
[1] "UTF-8"
Encoding(grade) <- "unknown"
grade
[1] "AÂ [+]"

注意多余的字符!

一个解决方案是

 grade <- page_html %>% html_nodes("td:nth-child(1) :nth-child(2) :nth-child(3) .DBTable_first") %>% html_text()
 grade <- iconv(grade, "UTF-8", "ASCII", "")
 identical(grade,"A[+]")
[1] TRUE

NB 从 UTF-8 转换为 ASCII 会删除空格,所以现在比较的是 "A[+]"

顺便说一句,我必须调整 html_nodes 中的 css 选择器字符串才能使其正常工作。

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2020-09-11
    • 1970-01-01
    • 2012-10-06
    • 2017-11-12
    • 2019-01-21
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多