【问题标题】:Text mining - Data extraction from website文本挖掘 - 从网站中提取数据
【发布时间】:2026-01-11 01:25:01
【问题描述】:

任何人都可以帮忙从下面的链接中提取评论及其位置吗?我已经成功地编写了代码,但无法在 Excel 的两个单独列中下载数据(评论及其位置)。我是 R 新手。

http://www.subaruoutback.org/forums/104-gen-4-2010-2014/22586-440-watt-9-speaker-harman-kardon-premium-audio-system-sound-quality.html

我用过的代码:

thepage = readLines('http://www.subaruoutback.org/forums/104-gen-4-2010- 
    2014/22586-440-watt-9-speaker-harman-kardon-premium-audio-system-sound-  
    quality.html')

#Location
grep('Location',thepage)
thepage[2738]

mypattern = '\t\t\t\t<div>Location: ([^<]*)</div>'
datalines = grep(mypattern,thepage[2738:length(thepage)],value=TRUE)
datalines

getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(mypattern,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(mypattern,'\\1',matches)
result
names(result) = NULL
result[1:10]
class(result)

#Review data
library(XML)
library(httr)
raw2 <- htmlTreeParse(thepage, useInternalNodes = TRUE)
data <- pathApply(raw2,"//div[startswith(@id,'post_message')]",xmlValue)
data <- unlist(data)
data
class(data)

df=data.frame(result,data)

write.csv(df,"D:/Important files/R Practice/texts/output9.csv")

 My Expected output:![My expected output format][1]

【问题讨论】:

  • 究竟是什么不起作用? df=data.frame(result,data = gsub("[\n\t\r]", "", data)); write.csv2(df,tf &lt;- tempfile(fileext = ".csv")); shell.exec(tf) 在这里看起来不错。 (我剥离了控制字符并使用了 write.csv2,它使用逗号作为小数点,使用分号作为分隔符)
  • 嘿..感谢它为我工作。我们可以把我们的输出格式如下吗?一列用于结果(位置),另一列用于相应数据(评论)。数据(评论)应该在同一列的一个单元格中。
  • @RonakKumar - 相应地更新您的问题。你提供的链接也被我破坏了。
  • 请使用此链接:“subaruoutback.org/forums/104-gen-4-2010-2014/…”或我的问题中提供的链接。
  • @lukeA - 使用您的代码后,我得到了输出。但我想要数据(评论)输出让我们在一列中说一个人。一个人的评论被分成不同的列。

标签: xml r scrape httr


【解决方案1】:

这是我使用rveststringr 得出的结论

library("rvest")
library("stringr")
url <- "http://www.subaruoutback.org/forums/104-gen-4-2010-2014/22586-440-watt-9-speaker-harman-kardon-premium-audio-system-sound-quality.html"
text <- url %>% 
          html() %>%  
          html_nodes(".main-column-text") %>% 
          html_text() %>% 
          str_replace_all("\\r|\\n|\\t", "") %>%
          str_trim()

loc <- url %>% 
         html() %>%  
         html_nodes(".main-column-picture") %>% 
         html_text() %>% 
         str_extract("Location:[(a-z),:; -(A-Z)]+")

df <- data.frame(text, loc, stringsAsFactors=F)
df <- df[text != "QuoteQuick Reply", ]
df <- df[!grepl("^Go to first new post", df$text), ]

【讨论】: