Python爬虫 股票数据爬取
前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取。目标抓取平安银行(000001)从1989年~2017年的全部财务数据。
数据源分析
地址分析
http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/000001/ctrl/2017/displaytype/4.phtml
在浏览器(PC上)中打开这个地址,就可以看到下图显示的财务数据。这个地址是一个通用格式:
(1)000001:是股票代码,换成其它代码就对应于其它股票财务数据;
(2)2017:是财务数据年份,这里2017就显示2017年的财务数据。2017年12月的财务数据要18年3月才出,暂时没有。其它年份数据替换相应年份即可查看。
抓取分析
(1)右键查看源码,可以看到目标财务数据在源码中。所以核心方法同前。此处的关键内容xPath是:table id = “BalanceSheetNewTable0”。
(2)与前文抓取分红数据不同的是,分红只有一页,这里涉及到多页数据,且页数还不统一。这比分红数据抓取要多解决两个问题:第一,要把不同年份的数据放在一起,进行拼接。第二,要判断最旧的年份是什么时候,什么时候停止抓取。
爬虫程序
运行环境:Win10系统;Python 3.0;Sublime Text编辑;
(1)先上程序。好像源码效果,先上截图,相关说明见代码注释。源码见后面。
上图中的绿色方框是本文与前文的重要区别。
(i)实现了将之前获得的dataframe格式数据(dataArr)与最新获得的dataframe格式数据(df)进行了合并。 利用了pandas包的自带函数:
dataArr = [dataArr,df]
dataArr = pd.concat(dataArr,axis=1,join=’inner’)
(ii)同时利用与空数据合并会产生异常,进行初始和结尾数据的判断。见蓝色框代码。
(2)运行结果。这里仅部分显示。要利用这些数据还需做更多处理。
http://www.aibbt.com/a/18042.html
小结
Python爬虫编程非常之简洁,核心代码只需要几行就能抓取想要的数据。其它的都是辅助,使函数更容易使用,或数据更直观。
利用pandas自带的concat实现相同格式的dataframe数据合并;同时利用该异常进行起始和结尾判断。
对起始和结尾有更好的判断方式,其实在源码中可以抓取到全部的年份的数据地址,逐一抓取即可。
源代码
import pandas as pdimport lxml.htmlfrom lxml import etreeimport numpy as npfrom pandas.io.html import read_htmlfrom pandas.compat import StringIOtry: from urllib.request import urlopen, Requestexcept ImportError: from urllib2 import urlopen, Requestimport timeimport sys#地址模板FINIANCE_SINA_URL = 'http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/%s/ctrl/%s/displaytype/4.phtml';def read_html_sina_finiance1(code):
has_data = True
#获取当前年份
today = pd.to_datetime(time.strftime("%x"))
year = today.year #数据用pandas的dataframe储存
dataArr = pd.DataFrame() while has_data: #新浪财经网页数据
furl = FINIANCE_SINA_URL%(code,year) #获取数据,标准处理方法
request = Request(furl)
text = urlopen(request, timeout=5).read()
text = text.decode('gbk')
html = lxml.html.parse(StringIO(text)) #分离目标数据
res = html.xpath("//table[@id=\"BalanceSheetNewTable0\"]")
sarr = [etree.tostring(node).decode('gbk') for node in res] #存储文件
sarr = ''.join(sarr)
sarr = '<table>%s</table>'%sarr #向前滚动一年
year-=1
#对最后一页进行判断,依据是数据是否有
try: #将数据读入到dataframe数据个数中;并进行连接;
df = read_html(sarr)[0]
df.columns=range(0,df.shape[1])
df = df.set_index(df.columns[0])
dataArr = [dataArr, df]
dataArr = pd.concat(dataArr, axis=1, join='inner') except: if (year+1)==today.year:
has_data=True
else:
has_data=False
dataArr = dataArr.T try:
dataArr = dataArr.set_index(dataArr.columns[0]) except:
dataArr=dataArr return dataArr
test = read_html_sina_finiance1('000001')
print(test)
Python爬虫 股票数据爬取的更多相关文章
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取
很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...
- Python爬虫实例:爬取猫眼电影——破解字体反爬
字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...
- python爬虫-基础入门-爬取整个网站《2》
python爬虫-基础入门-爬取整个网站<2> 描述: 开场白已在<python爬虫-基础入门-爬取整个网站<1>>中描述过了,这里不在描述,只附上 python3 ...
- python爬虫-基础入门-爬取整个网站《1》
python爬虫-基础入门-爬取整个网站<1> 描述: 使用环境:python2.7.15 ,开发工具:pycharm,现爬取一个网站页面(http://www.baidu.com)所有数 ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
- Python爬虫实例:爬取豆瓣Top250
入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...
- python爬虫-基础入门-爬取整个网站《3》
python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...
随机推荐
- 自动创建字符设备,不需mknod
自动创建设备文件 1.自动创建设备文件的流程 字符设备驱动模块 -->创建一个设备驱动class--->创建属于class的device--->调用mdev工具(自动完成)--> ...
- java递归
package com.sun.test; import java.util.ArrayList; import java.util.List; /** * 递归 * */ public class ...
- 【Tools】Pycharm 2018专业版 linux安装教程 附2018专业版密钥
Linux安装pycharm2018专业版 1. 下载安装包 Pycharm下载地址:http://www.jetbrains.com/pycharm/download/ 2.终端打开你的安装包所在路 ...
- Mac 系统安装 oh my zsh
先来张图感受一下: 安装oh my zsh: 1.克隆这个项目到本地(前提是你得有装git) git clone git://github.com/robbyrussell/oh-my-zsh.git ...
- 利用ajax获取网页表单数据,并存储到数据库之一(使用JDBC)
所谓JDBC就是利用java与数据库相连接的技术,从数据库获取既有的信息或者把网页上的信息存储到数据库. 这里简单的介绍公司的一个小项目中的一部分,由于代码较多,所以用图片形式进行展示.源码请查看源码 ...
- 数组的toString方法
数组继承了object类的toString方法,数据类型将按照旧的格式打印,例如: int[] luckyNumbers = {2,3,5,7,11,13}; String s = "&qu ...
- 移动端页面点击a标签会有半透明的阴影或红色边框的bug
好久没有更新了,今天来一发 ^_^ 最近在写移动端页面,测试时发现一个a标签的bug:无论是iOS端还是Android端都存在,当点击a标签,会有一个矩形的透明的阴影闪一下(不同的浏览器阴影的颜色还不 ...
- 使用nio对磁盘下的文件进行过滤
上篇博文讲到为了解决tomcat日志自动清理的问题,翻看了tomcat-juli这个jar包.在FileHandler类下有一个利用nio完成对磁盘下过期文件进行过滤的功能实现,正好这段时间正在学习n ...
- 【Learning】 动态树分治
简介 动态树分治整体上由点分治发展而来. 点分治是统计树上路径,而动态树分治用来统计与点有关的树上路径,比如多次询问某一些点到询问点的距离和. 前置知识就是点分治. 做法 众所周知,点分树(点分治中重 ...
- linux zabbix监控服务器搭建
搭建Zabbix监控服务器 准备运行环境(lamp) [root@zhuji1 ~]# yum -y install httpd [root@zhuji1 ~]# yum -y install php ...