项目目的:每日抓取大盘几个股的上一个交易日的收盘价格数据,并自动发送邮件

首先加载所要用到的R包:

library(rvest)
library(dplyr) 
library(htmlTable) #整合网页
library(mailR) #用来发邮件

抓取上证指数数据,以网易财经的股票数据为抓取目标页

url_szzs <- 'http://quotes.money.163.com/trade/lsjysj_zhishu_000001.html'
website_szzs <- read_html(url_szzs)
table_szzs <- html_table(website_szzs, fill = TRUE)
data_szzs <- table_szzs[[4]]

抓取深圳成指数据

url_szcz <- 'http://quotes.money.163.com/trade/lsjysj_zhishu_399001.html'
website_szcz <- read_html(url_szcz)
table_szcz <- html_table(website_szcz, fill = TRUE)
data_szcz <- table_szcz[[4]]

抓取格力电器个股数据

url_gldq <- 'http://quotes.money.163.com/trade/lsjysj_000651.html#06f01'
website_gldq <- read_html(url_gldq)
table_gldq <- html_table(website_gldq, fill = TRUE)
data_gldq <- table_gldq[[4]]

抓取分众传媒个股数据

url_fzcm <- 'http://quotes.money.163.com/trade/lsjysj_002027.html#06f01'
website_fzcm <- read_html(url_fzcm)
table_fzcm <- html_table(website_fzcm, fill = TRUE)
data_fzcm <- table_fzcm[[4]]

抓取科大讯飞个股数据

url_kdxf <- 'http://quotes.money.163.com/trade/lsjysj_002230.html#06f01'
website_kdxf <- read_html(url_kdxf)
table_kdxf <- html_table(website_kdxf, fill = TRUE)
data_kdxf <- table_kdxf[[4]]

最近一次收盘日期

ys_dp<-max(data_szzs$日期) #大盘最近一次收盘日期
ys_gg<-max(data_gldq$日期) #个股最近一次收盘日期

整合大盘数据形成表格

dp_results<-rbind(
  data.frame(
    项目="上证指数" ,
    filter(data_szzs,as.character(data_szzs$日期)==ys_dp)
  ),
  data.frame(
    项目="深圳成指" ,
    filter(data_szcz,as.character(data_szcz$日期)==ys_dp)
  )
)

整合个股数据形成表格

gg_results<-rbind(
  data.frame(
    项目="格力电器" ,
    filter(data_gldq,data_gldq$日期==ys_gg)
  ),
  data.frame(
    项目="分众传媒" ,
    filter(data_fzcm,data_fzcm$日期==ys_gg)
  ),
  data.frame(
    项目="科大讯飞" ,
    filter(data_kdxf,data_kdxf$日期==ys_gg)
  )
)

将大盘和个股数据表格转化为网页表格形式

dp_html<-htmlTable(dp_results,
                   rnames = FALSE,
                   align = paste(rep('|c|',ncol(dp_results)),collapse=''),
                   align.header = paste(rep('|c|',ncol(dp_results)),collapse=''),
                   col.columns = c(rep("none", 2), rep("#F5FBFF", 4)),
                   col.rgroup = c("none", "#F7F7F7"),
                   caption = '1、大盘交易情况'
                   )
gg_html<-htmlTable(gg_results,
                   rnames = FALSE,
                   align = paste(rep('|c|',ncol(gg_results)),collapse=''),
                   align.header = paste(rep('|c|',ncol(gg_results)),collapse=''),
                   col.columns = c(rep("none", 2), rep("#F5FBFF", 4)),
                   col.rgroup = c("none", "#F7F7F7"),
                   caption = '2、个股交易情况'
                   )
####合并
html<-paste0(dp_html,gg_html)

最后用mailR发送邮件进行监控

#收件人
recipients <- c("xxx@qq.com")
#发件人
sender = "xxx@qq.com"
#主题
title = paste0("stock market  " ,Sys.Date())
#填上邮箱密码code
send.mail(
  from = sender,
  to = recipients,
  subject = title,
  body = html,
  encoding = "utf-8",
  html = TRUE,
  smtp = list(
    host.name = "smtp.qq.com",
    port = 465,
    user.name = sender,
    passwd = "xxx",
    ssl = TRUE
  ),
  authenticate = TRUE,
  send = TRUE
)