查看原文
其他

R爬虫之上市公司公告批量下载

2017-04-13 黄耀鹏 R语言中文社区

selenium的安装及使用介绍


Selenium是一个用于测试网页应用的开源软件。它提供了浏览器中的点击,滚动,滑动,及文字输入等驱动程序。这样,利用Selenium即可以通过脚本程序来替代人工进行测试一个开发软件的各种功能。


在处理爬虫任务中,经常遇到需要输入文字,进行下拉菜单选择,以及鼠标点击等情景。这个时候,selenium就派上大用场了。


下面,我们先介绍一下Selenium的使用环境配置,接着介绍如何通过R的拓展包Rwebdriver来使用Selenium,最后,展示一个爬虫案例应用。


安装配置


  • 安装jre:

    • 下载地址:http://www.java.com/en/download/manual.jsp#win

  • 配置jre环境变量

    • http://jingyan.baidu.com/article/09ea3ede2b5f86c0aede39b9.html

    • http://blog.sciencenet.cn/blog-830496-778851.html

  • 下载selenium,并放至指定位置

    • 下载地址:http://www.seleniumhq.org/download/


启动selenium


  1. 打开命令提示符

  2. 进入selenium所在路径

  3. 启动selenium

cd "C:\Program Files (x86)\Rwebdriver"
java -jar selenium-server-standalone-2.49.0.jar

### selenium接口函数介绍


『Automated Data Collection with R』一书的作者开发了R包Rwebdriver,用于连接启用selenium。


该R包重要的函数如下:



更多细节请参考:


-『Automated Data Collection with R』第9章P253-P259

  • Selenium with Python http://selenium-python.readthedocs.io/


网页开发工具的使用介绍

(手动演示)



XML提取器相关函数的使用


  • xpathSApply(doc,path,fun = NULL)

可传入的fun如下:


案例演示——爬取上海证券交易所上市公司公告信息

#### packages we need ####
## ----------------------------------------------------------------------- ##
require(stringr)
require(XML)
require(RCurl)
library(Rwebdriver)

# set path
setwd("ListedCompanyAnnouncement")
# base url
BaseUrl<-"http://www.sse.com.cn/disclosure/listedinfo/announcement/"


#start a session
quit_session()
start_session(root = "http://localhost:4444/wd/hub/",browser = "firefox")


# post Base Url
post.url(url = BaseUrl)

# get xpath
StockCodeField<-element_xpath_find(value = '//*[@id="inputCode"]')
ClassificationField<-element_xpath_find(value = '/html/body/div[7]/div[2]/div[2]/div[2]/div/div/div/div/div[2]/div[1]/div[3]/div/button')
StartDateField<-element_xpath_find(value = '//*[@id="start_date"]')
EndDateField<-element_xpath_find(value = '//*[@id="end_date"]')
SearchField<-element_xpath_find(value = '//*[@id="btnQuery"]')


# fill stock code
StockCode<-"600000"

element_click(StockCodeField)
keys(StockCode)

Sys.sleep(2)

#fill classification field
element_click(ClassificationField)

# get announcement xpath
RegularAnnouncement<-element_xpath_find(value = '/html/body/div[7]/div[2]/div[2]/div[2]/div/div/div/div/div[2]/div[1]/div[3]/div/div/ul/li[2]')
Sys.sleep(2)
element_click(RegularAnnouncement)

# #fill start and end date
# element_click(StartDateField)

# today's xpath
EndToday<-element_xpath_find(value = '/html/body/div[13]/div[3]/table/tfoot/tr/th')
Sys.sleep(2)
element_click(EndDateField)
Sys.sleep(2)
element_click(EndToday)

#click search
element_click(SearchField)

###################################
####获得所有文件的link           ##
all_links<-character()


#首页链接
pageSource<-page_source()
parsedSourcePage<-htmlParse(pageSource, encoding = 'utf-8')

pdf_links<-'//*[@id="panel-1"]/div[1]/dl/dd/em/a'

all_links<-c(all_links,xpathSApply(doc = parsedSourcePage,path = pdf_links,
                                 
xmlGetAttr,"href"))



#############################
##遍历所有link,下载文件
for(i in 1:length(all_links)){
 
Sys.sleep(1)
 
if(!file.exists(paste0("file/",basename(all_links[i])))){
   
download.file(url = all_links[i],destfile = paste0("file/",basename(all_links[i])),mode = 'wb')
   
 
}
}


参考文献

  • 『Automated Data Collection with R』


黄耀鹏,R语言中文社区专栏作者,统计硕士生,R User,喜欢历史八卦。

博客:http://yphuang.github.io/




微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存