爬取沪深a股数据
首先从东方财富网获取股票代码
再从网易财经下载股票历史数据
- import requests
- import random
- from bs4 import BeautifulSoup as bs
- import time
- #import redis
- import re
- import json
- def get_stock_names():
- """
- 通过东方财富网上爬取股票的名称代码,并存入redis数据库和本地txt文档
- """
- rds = redis.from_url('redis://:666666@192.168.3.98:6379', db=1, decode_responses=True) # 连接redis db1
- url = "http://quote.eastmoney.com/stocklist.html"
- headers = {
- 'Referer': 'http://quote.eastmoney.com/center/gridlist.html',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
- }
- response = requests.get(url, headers=headers).content.decode('utf-8') # 网站编码为gbk 需要解码
- soup = bs(response, 'lxml')
- all_ul = soup.find('div', id='table_wrapper-table').find_all('ul') # 获取两个ul 标签数据
- with open('stock_names.txt', 'w+', encoding='utf-8') as f:
- for ul in all_ul:
- all_a = ul.find_all('a') # 获取ul 下的所有的a 标签
- for a in all_a:
- rds.rpush('stock_names', a.text) # a.text 为a标签中的text数据 rpush将数据右侧插入数据库
- f.write(a.text + '\n')
- def get_data(stocklist, outfile=r'D:\PycharmProjects\web_scraping\stockdata'):
- headers = {
- 'Referer': 'http://quotes.money.163.com/',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
- }
- #filelist = [os.path.splitext(file)[0] for file in os.listdir(r'D:\PycharmProjects\web_scraping\stockdata')]
- for stock_code, stock_name in stocklist:
- #if stock_code in filelist: continue
- try:
- #stock_code = stock_name.split('(')[1].split(')')[0]
- # 由于东方财富网上获取的代码一部分为基金,无法获取数据,故将基金剔除掉。
- # 沪市股票以6,9开头,深市以0,2,3开头,但是部分基金也是2开头,201/202/203/204这些也是基金
- # 另外获取data的网址股票代码 沪市前加0, 深市前加1
- if int(stock_code[0]) in [0, 2, 3, 6, 9]:
- if int(stock_code[0]) in [6, 9]:
- stock_code_new = '0' + stock_code
- elif int(stock_code[0]) in [0, 2, 3]:
- if not int(stock_code[:3]) in [201, 202, 203, 204]:
- stock_code_new = '1' + stock_code
- else: continue
- else: continue
- else: continue
- stock_url = 'http://quotes.money.163.com/trade/lsjysj_{}.html'.format(stock_code)
- respones = requests.get(stock_url, headers=headers).text
- soup = bs(respones, 'lxml')
- start_time = soup.find('input', {'name': 'date_start_type'}).get('value').replace('-', '') #获取起始时间
- end_time = soup.find('input', {'name': 'date_end_type'}).get('value').replace('-', '') #获取结束时间
- time.sleep(random.choice([1, 2])) #两次访问之间休息1-2秒
- download_url = "http://quotes.money.163.com/service/chddata.html?code={}&start={}&end={}&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP".format(stock_code_new, start_time, end_time)
- data = requests.get(download_url, headers=headers)
- file_name = outfile + '\\{}.csv'.format(stock_code)
- with open(file_name, 'wb') as f:
- for chunk in data.iter_content(chunk_size=10000): #批量写入数据
- if chunk:
- f.write(chunk)
- print("{}数据已下载".format(stock_code))
- except Exception as e:
- print("{}({})数据下载报错".format(stock_name, stock_code))
- print(e)
- import os
- # 获取目录下所有文件,绝对路径
- # 方法一
- def file_name(file_dir):
- L=[]
- for root, dirs, files in os.walk(file_dir):
- for file in files:
- if os.path.splitext(file)[1] == '.jpeg':
- L.append(os.path.join(root, file))
- return L
- # 方法二
- def listdir(path, list_name):
- for file in os.listdir(path): #不包括子目录文件 -> 递归
- file_path = os.path.join(path, file)
- if os.path.isdir(file_path):
- listdir(file_path, list_name)
- elif os.path.splitext(file_path)[1]=='.jpeg':
- list_name.append(file_path)
- stocklist = [] #3770支,只有'0','3','6'开头的
- max_page = 189
- for i in range(max_page):
- url = '''http://1.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112405721872315676919_1566176986516&pn={}
- &pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2&
- fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152
- &_=1566176986517'''.format(i+1)
- response = requests.get(url).content.decode('utf-8')
- json_text = re.sub(r'jQuery112405721872315676919_1566176986516\(', '', response)[:-2]
- #json_str = re.sub(r'\)', '', response)
- json_text = json.loads(json_text)
- for fi in json_text['data']['diff']:
- stocklist.append([fi['f12'], fi['f14']])
- # 下载数据
- get_data(stocklist, outfile=r'D:\PycharmProjects\web_scraping\stockdata')
参考资料:
Python爬虫(5):比Selenium快100倍的方法爬东方财富网财务报表
爬取沪深a股数据的更多相关文章
- [python]初试页面抓取——抓取沪深股市交易龙虎榜数据
[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...
- python 爬取天猫美的评论数据
笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...
- 爬虫(二)Python网络爬虫相关基础概念、爬取get请求的页面数据
什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...
- Python网络爬虫第三弹《爬取get请求的页面数据》
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- Python爬虫《爬取get请求的页面数据》
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- 02. 爬取get请求的页面数据
目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用 ...
- Python3爬取王者官方网站英雄数据
爬取王者官方网站英雄数据 众所周知,王者荣耀已经成为众多人们喜爱的一款休闲娱乐手游,今天就利用python3 爬虫技术爬取官方网站上的几十个英雄的资料,包括官方给出的人物定位,英雄名称,技能名称,CD ...
- python爬虫爬取get请求的页面数据代码样例
废话不多说,上代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # 导包 import urllib.request import urllib.pars ...
- python网络爬虫第三弹(<爬取get请求的页面数据>)
一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib ...
随机推荐
- 设计模式(含UML、设计原则、各种模式讲解链接)
一.统一建模语言UML UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进 ...
- C# -- 使用缓冲区进行文件下载操作
C# -- 使用缓冲区进行文件下载操作 1. 为避免下载超大文件占用内存资源,文件下载使用缓冲区,一点一点读取文件资源. string str0 = @"ftp://localhost:21 ...
- VSC 创建 Net Core 3.0 版本 WebAPI
首先确保安装好了VSC(这个算是废话......), 并且为VSC安装了Microsoft提供的C#插件, 以及.Net Core 3.0, 然后就可以开始了 1. 使用VSC打开已经创建好的文件夹( ...
- Python真牛逼,获取压缩文件密码,我只要一分钟!
事情的经过是这样的: 又是奶茶,行吧行吧. 快点开工,争取李大伟回来之前搞定. 李大伟说是6位数字密码 那么我们可以利用python生成全部的六位数字密码 这样,我们就生成了一个从000000到999 ...
- 常用注解解析(因为不太明白@component和@configuration写了)
1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...
- 如何使用第三方ui库vant-weapp
如何使用第三方ui库vant-weapp 1==>创建文件夹demo 2==> 在小程序 中打开 注意 要先在小程序中打开 如果要想在小程序的开发工具中打开某一个 文件夹 要么是空文件夹 ...
- 集合系列 Set(八):TreeSet
TreeSet 是 Set 集合的红黑树实现,但其内部并没有具体的逻辑,而是直接使用 TreeMap 对象实现.我们先来看看 TreeSet 的定义. public class TreeSet< ...
- 1+x 证书 Web 前端开发中级理论考试(试卷 8 )含答案
1+x 证书 Web 前端开发中级理论考试(试卷 8 ) 官方QQ群 转载请注明来源:妙笔生花个人博客http://blog.zh66.club/index.php/archives/438/ 一.单 ...
- three.js实现土星绕太阳体系
概况如下: 1.SphereGeometry实现自转的太阳,土星: 2.RingGeometry实现土星公转轨道: 3.ImageUtils加载球体贴图: 4.canvas中createRadialG ...
- 查看Oracle被锁的表以及如何解锁
注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,db ...