热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫:在网易财经抓取表格数据案例

(1)数据网址获取网易财经和新浪财经等网站的数据可以免费获取,我们可以使用爬虫方法(通过rvest包)抓取相应网站的表格数据,我们首先以在网易财经中抓取600550在2019年第3

1)数据网址获取

网易财经和新浪财经等网站的数据可以免费获取,我们可以使用爬虫方法(通过rvest包)抓取相应网站的表格数据,我们首先以在网易财经中抓取600550在2019年第3季度的数据为例,其网址为:

http://quotes.money.163.com/trade/lsjysj_600550.html?year=2019&season=3,

可以看到不同时间段的网址是有规律的,只需要更改其中的股票代码和year、season就可以进行多个股票的循环网页抓取。

2)网络表格数据节点获取

我们需要解析网页表格数据的节点,除了系统性地掌握网页设计原理和基本结构,还可以通过FireFox(Firebug插件)、Chrome浏览器来对网页结构进行解析得到相应的分支结构点,这里我们使用Firefox浏览器,具体操作为在找到我们需要的表格位置后(关于如何找到表格位置请自行探索),右键点击复制XPath路径。

表格部分的XPath为/html/body/div[2]/div[4]/table[1]。

技术分享图片

 

 

3)抓取单个股票的单个页面数据 

 


library(rvest)
symbol
=600550
year
=2019
season
=3
url
=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
web
=read_html(url)
xpath
="/html/body/div[2]/div[4]/table[1]"
web.table
=web%>%html_nodes(xpath=xpath)%>%html_table()

 

此时的web.table就是爬取到的数据

4)抓取单个股票的多个页面数据并合并


library(lubridate)
symbol
=600550
from="2001-05-28"
from=as.Date(from)
to
=Sys.Date()
time.index
=seq(from=from,to=to,by="quarter")#生成以季度为开始的时间序列
year.id=year(time.index)#获取年份
quarter.id=quarter(time.index)#获取季度

price
=list()
for(t in 1:length(time.index)){
year
=year.id[t]
season
=quarter.id[t]
url
=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
web
=read_html(url)
xpath
="/html/body/div[2]/div[4]/table[1]"
web.table
=web%>%html_nodes(xpath=xpath)%>%html_table()
web.table
=web.table[[1]][-1,]
price[[t]]
=web.table
}

5)抓取多个股票的多个页面数据并合并


get.wangyi.stock=function(symbol,from,to){
from=as.Date(from)
to
=as.Date(to)
if(mday(from==1)){
from=from-1
}
time.index
=seq(from=from,to=to,by="quarter")
year.id
=year(time.index)
quarter.id
=quarter(time.index)
prices
=list()
for(t in 1:length(time.index)){
year
=year.id[t]
season
=quarter.id[t] url=paste0("http://quotes.money.163.com/trade/lsjysj_",symbol,".html?year=",year,"&season=",season)
web
=read_html(url)
xpath
="/html/body/div[2]/div[4]/table[1]"
web.table
=web%>%html_nodes(xpath=xpath)%>%html_table()
web.table
=web.table[[1]][-1,]
prices[[t]]
=web.table
}
}
to
=Sys.Date()
stock.index
=matrix(nrow=6,ncol=2)
stock.index[,
1]=c("600550.ss","600192.ss","600152.ss","600644.ss","600885.ss","600151.ss")
stock.index[,
2]=c("2017-05-28","2017-05-28","2017-05-28","2017-05-28","2017-05-28","2017-05-28")
for(i in nrow(stock.index)){
symbol
=stock.index[i,1]
from=stock.index[i,2]
prices
=get.wangyi.stock(symbol,from,to)
filenames
=paste0("D://dataset//",symbol,".csv")
}

6)读取所有A股数据

我们还可以将所有的A股代码整理为一个文件,读取后即可以实现对所有A股股票数据进行实时更新,可以通过这种方法来建立自己的数据库进行实时分析。同时通过网络爬虫,我们还可以爬取很多有意义的数据,并进行实时更新。

 


推荐阅读
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
  • 在研究网络爬虫时,遇到了一个问题:抓取到的数据与浏览器中显示的不一致。通过JavaScript动态更新的内容无法直接获取。本文将探讨如何有效捕获这些动态变化的数据。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
author-avatar
淘气小顽童刘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有