用R做网络爬虫抓不到我需要的内容(文本挖掘)(台湾BBS,ptt)

Use R to do web Crawler and it can not capture content I need(text mining)(Taiwanese BBS, ptt)

我是台湾国立台北商业大学的 Joe。我目前正在通过社交媒体中的文本挖掘对在线游戏和 E-sports 进行研究。我选择从台湾最流行的BBS "PTT"获取数据,但我的代码似乎只能捕获文章标题而无法获取内容。

我试图从www.ptt.cc/bbs/LoL/index6402.html获取文本到index6391,我使用的代码在my R code data or R code txt file或以下。

install.packages("httr")
install.packages("XML")
install.packages("RCurl")
install.packages("xml2")

library(httr)
library(XML)
library(RCurl)
library(xml2)


data <- list()

for( i in 6391:6402) {
  tmp <- paste(i, '.html', sep='')
  url <- paste('https://www.ptt.cc/bbs/LoL/index', tmp, sep='')
  tmp <- read_html(url)
  html <- htmlParse(getURL(url))
  url.list <- xml_find_all(tmp, "//div[@class='title']/a[@href]")
  data <- rbind(data, as.matrix(paste('https://www.ptt.cc', url.list, sep='')))
}
data <- unlist(data)

getdoc <- function(line){
  start <- regexpr('https://www', line)[1]
  end <- regexpr('html', line)[1]

  if(start != -1 & end != -1){
    url <- substr(line, start, end+3)
    html <- htmlParse(getURL(url), encoding='UTF-8')
    doc <- xpathSApply(html, "//div[@id='main-content']", xmlValue)
    name <- strsplit(url, '/')[[1]][4]
    write(doc, gsub('html', 'txt', name))
  }      
}
setwd("E:/data")
sapply(data, getdoc)

但是这段代码只能捕获标题,我的txt文件是空的。我不确定哪一部分出了问题,因此我需要你在 Whosebug 上的一些建议。

非常感谢任何建议,任何帮助我的人都会在我的论文中的致谢名单上,如果你对此感到好奇,我会在研究结果出来后通知你完毕。 :)

类似于:

library(tidyverse)
library(rvest)

# change the end number
pages <- map(6391:6392, ~read_html(sprintf("https://www.ptt.cc/bbs/LoL/index%d.html", .)))

map(pages, ~xml_find_all(., "//div[@class='title']/a[@href]")) %>% 
  map(xml_attr, "href") %>% 
  flatten_chr() %>% 
  map_df(function(x) {
    URL <- sprintf("https://www.ptt.cc%s", x)
    pg <- read_html(URL)
    data_frame(
      url=URL,
      text=html_nodes(pg, xpath="//div[@id='main-content']") %>% html_text()
    )
  }) -> df

glimpse(df)
## Observations: 40
## Variables: 2
## $ url  <chr> "https://www.ptt.cc/bbs/LoL/M.1481947445.A.17B.html", "https://www.ptt.cc/b...
## $ text <chr> "作者rainnawind看板LoL標題[公告] LoL 板 開始舉辦樂透!時間Sat Dec 17 12:04:03 2016\nIMT KDM 勝...

制作数据框或分出最后一部分:

dir.create("pttdocs")

map(pages, ~xml_find_all(., "//div[@class='title']/a[@href]")) %>% 
  map(xml_attr, "href") %>% 
  flatten_chr() %>% 
  walk(function(x) {

    URL <- sprintf("https://www.ptt.cc%s", x)

    basename(x) %>% 
      tools::file_path_sans_ext() %>% 
      sprintf(fmt="%s.txt") %>% 
      file.path("pttdocs", .) -> fil

    pg <- read_html(URL)

    html_nodes(pg, xpath="//div[@id='main-content']") %>% 
      html_text() %>% 
      writeLines(fil)

  }) 

将文件写入目录。