目标:不做蜡烛图,只用折线图绘图,绘出四条线之间的关系。

注:未使用接口,仅爬虫学习,不做任何违法操作。

 """
新浪财经,爬取历史股票数据
""" # -*- coding:utf-8 -*- import numpy as np
import urllib.request, lxml.html
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re, time
import matplotlib.pyplot as plt
from datetime import datetime
# 绘图显示中文设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 公共模块,请求头信息
def public(link):
r = urllib.request.Request(link) ug = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0' r.add_header('User-Agent', ug) cookie = "SUB=_2AkMsqZjif8NxqwJRmfkRxG7nZYpzyg_EieKa9Wk5JRMyHRl-yD83qkJatRB6Bym2DDqPE870e3uMsySIjHjrMbMNxNqk; " \
"SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFXmxLGpAG5k05lCJw6qgYe; " \
"SINAGLOBAL=172.16.92.24_1542789082.401113; " \
"Apache=172.16.92.24_1542789082.401115; UOR=www.baidu.com,blog.sina.com.cn,; " \
"ULV=1542789814434:1:1:1:172.16.92.24_1542789082.401115:; U_TRS1=000000d1.1f4d3546.5bf53673.955fa32e; " \
"U_TRS2=000000d1.1f593546.5bf53673.736853cc; FINANCE2=661413ac85cadaab72ec7e3d842d6a3a; _s_upa=1" r.add_header("Cookie", cookie) html = urllib.request.urlopen(r, timeout=500).read() bsObj = BeautifulSoup(html, "lxml") # 将html对象转化为BeautifulSoup对象 return bsObj # 获取股票价格
def shares_price(code, year, quarter):
link = "http://money.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/%s.phtml?year=%d&jidu=%d" % (code, year, quarter) bsObj = public(link)
# print(bsObj) a = 0
# date_list为日期列表,open_list为开盘价列表,high_list为最高价列表,close_list为收盘价列表,low_list为最低价列表
price_list, date_list, open_list, high_list, close_list, low_list = [], [], [], [], [], []
# 获取股票信息
jpg_title = re.findall("(.*?\))", bsObj.title.text) prices_bs = bsObj.find_all(name='div', attrs={"align": 'center'})
# 获取并处理价格信息
for price_bs in prices_bs:
# 去除空格
price_bs_1 = price_bs.text.replace("\n\r\n\t\t\t", "")
price_bs_2 = price_bs_1.replace("\t\t\t\n", "") # 6个字符串为一个列表
if a != 6:
price_list.append(price_bs_2)
a = a + 1
else:
date_list.append(price_list[0])
open_list.append(price_list[1])
high_list.append(price_list[2])
close_list.append(price_list[3])
low_list.append(price_list[4])
a = 0
price_list = []
# 删除列表头
for b in (date_list, open_list, high_list, close_list, low_list):
b.pop(0) # 全部倒序排列(由日期远到近,从左到右排列)
for c in (date_list, open_list, high_list, close_list, low_list):
c.reverse() return date_list, open_list, high_list, close_list, low_list, jpg_title # 输入股票代码,年份,季度
code = ""
year = ""
quarter = 4
# 以下为手动输入模式,因调试方便默认上面固定模式。
# code = input("code:") # 002925
# year = input("year:") # 2018
# quarter = int(input("quarter:")) # 列表字符串转为数值date
x = [datetime.strptime(d, '%Y-%m-%d').date() for d in shares_price(code, int(year), quarter)[0]]
# 将爬取的数据(字符串)转化为浮点型
open_list = [float(i) for i in shares_price(code, int(year), quarter)[1]]
high_list = [float(i) for i in shares_price(code, int(year), quarter)[2]]
close_list = [float(i) for i in shares_price(code, int(year), quarter)[3]]
low_list = [float(i) for i in shares_price(code, int(year), quarter)[4]] # 线条设置
plt.plot(x, open_list, label='open', linewidth=1, color='red', marker='o', markerfacecolor='blue', markersize=2)
plt.plot(x, high_list, label='high', linewidth=1, color='green', marker='o', markerfacecolor='blue', markersize=2)
plt.plot(x, close_list, label='close', linewidth=1, color='blue', marker='o', markerfacecolor='blue', markersize=2)
plt.plot(x, low_list, label='low', linewidth=1, color='black', marker='o', markerfacecolor='blue', markersize=2) # 取数列最大数值与最小值做图表的边界值。
plt.ylim(min(low_list)-1, max(high_list)+1)
plt.gcf().autofmt_xdate() # 自动旋转日期标记 # 打印表头
plt.xlabel('time')
plt.ylabel('price')
# shares_price(code, int(year), quarter)[5][0]为title中的股票名称与代码
plt.title('gp_1_{0}.jpg'.format(shares_price(code, int(year), quarter)[5][0]))
plt.legend()
plt.show()

效果如下:

是不是有另一种看法的感觉?如:黑线下跌后向上的第一个大拐点为买入点。

python爬取新浪股票数据—绘图【原创分享】的更多相关文章

  1. Python抓取新浪新闻数据(二)

    以下是抓取的完整代码(抓取了网页的title,newssource,dt,article,editor,comments)举例: 转载于:https://blog.51cto.com/2290153/ ...

  2. selenium+BeautifulSoup+phantomjs爬取新浪新闻

    一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...

  3. Python3:爬取新浪、网易、今日头条、UC四大网站新闻标题及内容

    Python3:爬取新浪.网易.今日头条.UC四大网站新闻标题及内容 以爬取相应网站的社会新闻内容为例: 一.新浪: 新浪网的新闻比较好爬取,我是用BeautifulSoup直接解析的,它并没有使用J ...

  4. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...

  5. 手把手教你使用Python爬取西刺代理数据(下篇)

    /1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...

  6. python爬取豆瓣电影信息数据

    题外话+ 大家好啊,最近自己在做一个属于自己的博客网站(准备辞职回家养老了,明年再战)在家里 琐事也很多, 加上自己 一回到家就懒了(主要是家里冷啊! 广东十几度,老家几度,躲在被窝瑟瑟发抖,) 由于 ...

  7. 【转】Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  8. Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  9. Python 爬虫实例(7)—— 爬取 新浪军事新闻

    我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8 import json import redis i ...

随机推荐

  1. Android零基础入门第84节:引入Fragment原来是这么回事

    随着大众生活水平的提高,再加上移动互联网的迅速发展,几乎每个人都至少拥有一台搭载Android系统的移动设备.Android设备的多样性给我们带来了很大的便捷,各Android设备拥有不同分辨率和不同 ...

  2. C#二分查找法 破洞百出版本

    二分查找法在数据繁多的数据中查找是一种快速的方法,每次查找最多需要的次数 为2的n次方小于总个数. 当然是有前提的,就是需要把数据先排好序,这里指的都是数值型的数据. 基本思想就是把需要找的值与排序好 ...

  3. Model1简介

    Model1模型出现前,整个Web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应. 弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序 ...

  4. x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)

    判断一个32位应用程序是否运行在x64系统下,可以使用下面的代码: BOOL IsX64System() { BOOL bIsWow64 = FALSE; typedef BOOL (WINAPI * ...

  5. 如何让你的Sublime和Codeblocks支持C++11

    闲来没事看了一下C++11,比起C++0x多了很多新功能,像auto变量,智能指针等,g++4.7以上版本也提供了对C++11的支持,但是,如何在你的编辑器上执行C++11代码呢? 刚开始以为用法和以 ...

  6. Laravel中我们登录服务器通过 Tinker 手动创建后台管理用户

    Laravel中我们可以登录到服务器通过 Tinker 手动创建后台用户 laravel中tinker命令的作用是用来调试laravel,可以打印变量或对象信息,显示函数代码,对数据库写入和查询数据. ...

  7. You can't specify target table 'tbl_students' for update in FROM clause错误

    此问题只出现在mysql中 oracle中无此问题 在同一语句中,当你在select某表的数据后,不能update这个表,如: DELETE FROM tbl_students WHERE id NO ...

  8. Laravel --- Laravel 5.3 队列使用方法

    一.设置存储方式 在config/queue.php中查看队列驱动,在.env 设置[QUEUE_DRIVER] 主要介绍数据库驱动 二.数据库驱动 1.修改.env CACHE_DRIVER=fil ...

  9. 如何把设计稿中px值转化为想要的rem值

    首先我们需要的是把尺寸转化为rem值 假如 设计稿中的是 200px*200px的图片 移动端的设计图尺寸一般是640*750; 第一步.  把图片分为若干份(好算即可),每一份的大小就是rem的单位 ...

  10. Linux就该这么学---第一课 20190705

    要认真学习,认真完成作业,最主要是坚持,我感觉自己坚持这个能力欠缺,要主动改正. 还想说一句,以前我是20期学员,后面没有时间学习了,现在到22期了,我要坚持学习完成,坚持 坚持 坚持!!! 现在分享 ...