RSelenium表单信息输入的小尝试
最近由于项目需要,准备搜集国共人物的基本信息,无意中发现了一个很棒的系统:国立政治大学开放的中共政治菁英資料庫,虽然游客身份只能看到基本信息,但是其中收录的人物很全,而且提供人名的拼音搜索,避开繁体/简体的转化(实际转化起来也不困难)。
名单准备
爬虫的便利之处应该在于信息提取过程的自动化,简单的数据清洗有时并不一定非要在R里进行。现在手头上拿到的是一个很长的人物名单,我复制了所有人名(按照一人一行的格式),粘贴到中文轉拼音/漢字轉拼音网站,将所有文字全部转化为拼音(无声调),说起来这个转换网站貌似也是台湾的。然后把转化后的人名拼音同样按照一人一行的格式,保存在excel里,这时候得到的人名格式是zhang san
或者zhang san feng
。
而资料库的拼音搜索格式是zhang san
或者zhang sanfeng
,只在姓与名之间留有空格,不区分大小写。所以excel文件里的人名还需要再做一下分列处理。
将名字部分无缝合并:
将姓与名字以一个空格合并:
另存为csv文件,这样就可以直接读入R,作为关键字搜索了。
RSelenium表单输入
library(rvest)
library(RSelenium)
library(stringi)
# 读取人名拼音
data <- read.csv(file.choose(), encoding = 'UTF-8', header = F)
# 启动Selenium服务器
shell("java -jar D:/R/library/Rwebdriver/selenium-server-standalone-3.7.1.jar",
wait = FALSE, invisible = FALSE)
# 打开浏览器-连接页面-输入查找信息-爬取内容
Info <- list()
remDr <- remoteDriver(browserName = "chrome")
remDr$open()
for (i in seq_along(data)) {
url <- 'http://cped.nccu.edu.tw/listhan'
remDr$navigate(url)
# 定位到input搜索框
subElem <- remDr$findElement(using = 'name', value = 'field_re_han_name_value')
# 清除搜索框内原来的默认信息
subElem$clearElement()
subElem$sendKeysToElement(list(c(data[i]), key = 'enter'))
# 查找结果如果是“資料庫無任何記錄”,就跳过进入下一个
emp <- remDr$getPageSource()[[1]] %>% read_html(encoding = "UTF-8")
if (emp %>% html_nodes('div.view-empty') %>% html_text() %>% length == 1) {
next
} else {
# 如果查找到相应的信息,就定位到链接位置
personElem <- remDr$findElement(value = '//span[@class="field-content"]/a[@href]')
personurl <- personElem$getElementAttribute('href')
# 点击链接
personElem$clickElement()
# 获取页面内容
destination <- remDr$getPageSource()[[1]] %>% read_html(encoding = "UTF-8")
degree <- destination %>% html_nodes(., xpath = '//div[@class="field field-name-field-re-degree field-type-list-text field-label-hidden"]')
%>% html_text()
baseinfo <- destination %>% html_nodes(., xpath = '//table[@id="basic-info"]')
%>% html_text() %>% gsub('\t', '', .)
%>% gsub('\n', ' ', .) %>% stri_trim_both()
Info[[i]] <- baseinfo
Sys.sleep(3)
}
}
# 关闭浏览器
remDr$close()
总结
input搜索框的定位:
当查找到相应信息时,定位到链接位置:
最后得到的Info信息:
[[1]]
[1] "個人資料 漢語拼音 Liu Shenzhi 性別 男 年齡 58 民族 漢族 最高學歷 留學經驗 留學國家 出生 1911 / 5 死亡 1969 / 5 祖籍 河北靜海 專業頭銜 參加工作 出生地 政黨 中國共產黨 入黨時間 1927 共青團 無或副處級以下 特殊關係 備註 原名劉玉田,曾用名劉振幫"
[[2]]
[1] "個人資料 漢語拼音 Ding Sheng 性別 男 年齡 86 民族 漢族 最高學歷 大學本科 留學經驗 留學國家 出生 1913 / 7 死亡 1999 / 9 祖籍 江西于都 專業頭銜 少將 參加工作 1930/6 出生地 政黨 中國共產黨 入黨時間 1932 共青團 無或副處級以下 特殊關係 備註"
[[3]]
[1] "個人資料 漢語拼音 Gan Sihe 性別 男 年齡 73 民族 漢族 最高學歷 中學以下 留學經驗 留學國家 出生 1915 / 12 死亡 1988 / 11 祖籍 湖北黃安(今紅安) 專業頭銜 上將 參加工作 1929 出生地 政黨 中國共產黨 入黨時間 1930 共青團 無或副處級以下 特殊關係 備註 第三至五屆全國政協委員。獲頒二級八一勳章、一級獨立自由勳章、一級解放勳章。"
[[4]]
[1] "個人資料 漢語拼音 Guo Huaruo 性別 男 年齡 91 民族 漢族 最高學歷 留學經驗 學位 留學國家 俄國 出生 1904 死亡 1995 / 11 祖籍 福建福州 專業頭銜 中將 參加工作 出生地 政黨 中國共產黨 入黨時間 1925 共青團 無或副處級以下 特殊關係 備註 原名郭可彬,曾用名郭俊英、郭化玉、郭化羽"
[[5]]
[1] "個人資料 漢語拼音 Li Chiran 性別 男 年齡 104 民族 漢族 最高學歷 留學經驗 留學國家 出生 1914 死亡 祖籍 陜西安定(今子長) 專業頭銜 少將 參加工作 出生地 政黨 中國共產黨 入黨時間 1929 共青團 無或副處級以下 特殊關係 備註 原名李宗貴,曾用名李忠桂"
...