用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)
})
将文件写入目录。
我是台湾国立台北商业大学的 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)
})
将文件写入目录。