【问题标题】:Avoid getting "glued" words with R webscraping避免使用 R webscraping 获得“粘”字
【发布时间】:2017-10-14 07:03:31
【问题描述】:

当我同时使用以下两个代码块时,我会得到“粘合”的单词,我的意思是没有用空格分隔但它们应该用空格分隔的单词,这是一个问题。在原始 HTML 中,它们似乎被 <b> 分隔,我无法处理这个问题。这两个块以不同的方式做同样的事情。

library(XML)
library(RCurl)
# Block 1---------
url <- "https://www.letras.mus.br/red-hot-chili-peppers/32739/"
u <- readLines(url)
h <- htmlTreeParse(file=u,  
               asText=TRUE, 
               useInternalNodes = TRUE, 
               encoding = "utf-8")

song <- getNodeSet(doc=h, path="//article", fun=xmlValue)

# Block 2---------
u <- "https://www.letras.mus.br/red-hot-chili-peppers/32739/"
h <- htmlParse(getURL(u))
song <- xpathSApply(h, path = "//article", fun = xmlValue)

返回类似:

[1] “有时我觉得我没有合作伙伴有时感觉像我唯一的朋友是我居住的城市城市angelsLonely 当我在一起哭泣时我在她的街道上开车因为她是我的伴侣我走过她的山丘因为她知道我是谁她看到了我的善行并且她在风中吻我我从不worryNow 那是个谎言我从来不想感觉像那天我做过但带我去我爱的地方带我一路走很难相信那有没有人在那里很难相信我一个人在......

【问题讨论】:

  • 快速而肮脏的解决方法是将u &lt;- gsub("&lt;br/&gt;"," ",as.character(u)) 放在u &lt;- readLines(url) 行之后。它将用空格替换每个
    。或者,如果您想将其保留为换行符而不是空格,也可以使用 u &lt;- gsub("&lt;br/&gt;","\n",as.character(u))
  • @MattJewett 我也有类似的想法。无论如何,不​​管它是否脏,它都有效,非常感谢。

标签: html r web-scraping


【解决方案1】:

我能够使用以下代码检索单词:

library(RSelenium)
shell('docker run -d -p 4445:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, browserName = "firefox")
remDr$open()
remDr$navigate("https://www.letras.mus.br/red-hot-chili-peppers/32739/")
remDr$screenshot(display = TRUE, useViewer = TRUE) 
page_Content <- remDr$getPageSource()[[1]]

list_Text_Song <- list()

for(i in 1 : 30)
{
  print(i)
  web_Obj <- tryCatch(remDr$findElement("xpath", paste0("//*[@id='js-lyric-cnt']/article/div[2]/div[2]/p[", i, "]")), error = function(e) NA)
  list_Text_Song[[i]] <- tryCatch(web_Obj$getElementText(), error = function(e) NA)
}

list_Text_Song <- unlist(list_Text_Song)
list_Text_Song <- list_Text_Song[!is.na(list_Text_Song)]

用这种方法不粘话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多