《中共政治菁英資料庫》信息爬取

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 共青團  無或副處級以下 特殊關係   備註  原名李宗貴,曾用名李忠桂"

...

猜你喜欢

转载自blog.csdn.net/Joyliness/article/details/79966625