首先从东方财富网获取股票代码

再从网易财经下载股票历史数据

  1. import requests
  2. import random
  3. from bs4 import BeautifulSoup as bs
  4. import time
  5. #import redis
  6. import re
  7. import json
  8.  
  9. def get_stock_names():
  10. """
  11. 通过东方财富网上爬取股票的名称代码,并存入redis数据库和本地txt文档
  12. """
  13. rds = redis.from_url('redis://:666666@192.168.3.98:6379', db=1, decode_responses=True) # 连接redis db1
  14.  
  15. url = "http://quote.eastmoney.com/stocklist.html"
  16. headers = {
  17. 'Referer': 'http://quote.eastmoney.com/center/gridlist.html',
  18. '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'
  19. }
  20.  
  21. response = requests.get(url, headers=headers).content.decode('utf-8') # 网站编码为gbk 需要解码
  22. soup = bs(response, 'lxml')
  23. all_ul = soup.find('div', id='table_wrapper-table').find_all('ul') # 获取两个ul 标签数据
  24. with open('stock_names.txt', 'w+', encoding='utf-8') as f:
  25. for ul in all_ul:
  26. all_a = ul.find_all('a') # 获取ul 下的所有的a 标签
  27. for a in all_a:
  28. rds.rpush('stock_names', a.text) # a.text 为a标签中的text数据 rpush将数据右侧插入数据库
  29. f.write(a.text + '\n')
  30.  
  31. def get_data(stocklist, outfile=r'D:\PycharmProjects\web_scraping\stockdata'):
  32. headers = {
  33. 'Referer': 'http://quotes.money.163.com/',
  34. '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'
  35. }
  36. #filelist = [os.path.splitext(file)[0] for file in os.listdir(r'D:\PycharmProjects\web_scraping\stockdata')]
  37. for stock_code, stock_name in stocklist:
  38. #if stock_code in filelist: continue
  39. try:
  40. #stock_code = stock_name.split('(')[1].split(')')[0]
  41. # 由于东方财富网上获取的代码一部分为基金,无法获取数据,故将基金剔除掉。
  42. # 沪市股票以6,9开头,深市以0,2,3开头,但是部分基金也是2开头,201/202/203/204这些也是基金
  43. # 另外获取data的网址股票代码 沪市前加0, 深市前加1
  44. if int(stock_code[0]) in [0, 2, 3, 6, 9]:
  45. if int(stock_code[0]) in [6, 9]:
  46. stock_code_new = '0' + stock_code
  47. elif int(stock_code[0]) in [0, 2, 3]:
  48. if not int(stock_code[:3]) in [201, 202, 203, 204]:
  49. stock_code_new = '1' + stock_code
  50. else: continue
  51. else: continue
  52. else: continue
  53.  
  54. stock_url = 'http://quotes.money.163.com/trade/lsjysj_{}.html'.format(stock_code)
  55. respones = requests.get(stock_url, headers=headers).text
  56. soup = bs(respones, 'lxml')
  57. start_time = soup.find('input', {'name': 'date_start_type'}).get('value').replace('-', '') #获取起始时间
  58. end_time = soup.find('input', {'name': 'date_end_type'}).get('value').replace('-', '') #获取结束时间
  59. time.sleep(random.choice([1, 2])) #两次访问之间休息1-2秒
  60. 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)
  61. data = requests.get(download_url, headers=headers)
  62. file_name = outfile + '\\{}.csv'.format(stock_code)
  63. with open(file_name, 'wb') as f:
  64. for chunk in data.iter_content(chunk_size=10000): #批量写入数据
  65. if chunk:
  66. f.write(chunk)
  67. print("{}数据已下载".format(stock_code))
  68.  
  69. except Exception as e:
  70. print("{}({})数据下载报错".format(stock_name, stock_code))
  71. print(e)
  72.  
  73. import os
  74. # 获取目录下所有文件,绝对路径
  75. # 方法一
  76. def file_name(file_dir):
  77. L=[]
  78. for root, dirs, files in os.walk(file_dir):
  79. for file in files:
  80. if os.path.splitext(file)[1] == '.jpeg':
  81. L.append(os.path.join(root, file))
  82. return L
  83.  
  84. # 方法二
  85. def listdir(path, list_name):
  86. for file in os.listdir(path): #不包括子目录文件 -> 递归
  87. file_path = os.path.join(path, file)
  88. if os.path.isdir(file_path):
  89. listdir(file_path, list_name)
  90. elif os.path.splitext(file_path)[1]=='.jpeg':
  91. list_name.append(file_path)
  92.  
  93. stocklist = [] #3770支,只有'0','3','6'开头的
  94. max_page = 189
  95. for i in range(max_page):
  96. url = '''http://1.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112405721872315676919_1566176986516&pn={}
  97. &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&
  98. 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
  99. &_=1566176986517'''.format(i+1)
  100. response = requests.get(url).content.decode('utf-8')
  101. json_text = re.sub(r'jQuery112405721872315676919_1566176986516\(', '', response)[:-2]
  102. #json_str = re.sub(r'\)', '', response)
  103. json_text = json.loads(json_text)
  104. for fi in json_text['data']['diff']:
  105. stocklist.append([fi['f12'], fi['f14']])
  106.  
  107. # 下载数据
  108. get_data(stocklist, outfile=r'D:\PycharmProjects\web_scraping\stockdata')

  

参考资料:

爬虫:爬取股票历史交易数据

爬取东方财富股票信息网

Python爬虫(5):比Selenium快100倍的方法爬东方财富网财务报表

爬取沪深a股数据的更多相关文章

  1. [python]初试页面抓取——抓取沪深股市交易龙虎榜数据

    [python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...

  2. python 爬取天猫美的评论数据

    笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...

  3. 爬虫(二)Python网络爬虫相关基础概念、爬取get请求的页面数据

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫    1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...

  4. Python网络爬虫第三弹《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  5. Python爬虫《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  6. 02. 爬取get请求的页面数据

    目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用 ...

  7. Python3爬取王者官方网站英雄数据

    爬取王者官方网站英雄数据 众所周知,王者荣耀已经成为众多人们喜爱的一款休闲娱乐手游,今天就利用python3 爬虫技术爬取官方网站上的几十个英雄的资料,包括官方给出的人物定位,英雄名称,技能名称,CD ...

  8. python爬虫爬取get请求的页面数据代码样例

    废话不多说,上代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # 导包 import urllib.request import urllib.pars ...

  9. python网络爬虫第三弹(<爬取get请求的页面数据>)

    一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib ...

随机推荐

  1. 设计模式(含UML、设计原则、各种模式讲解链接)

    一.统一建模语言UML UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进 ...

  2. C# -- 使用缓冲区进行文件下载操作

    C# -- 使用缓冲区进行文件下载操作 1. 为避免下载超大文件占用内存资源,文件下载使用缓冲区,一点一点读取文件资源. string str0 = @"ftp://localhost:21 ...

  3. VSC 创建 Net Core 3.0 版本 WebAPI

    首先确保安装好了VSC(这个算是废话......), 并且为VSC安装了Microsoft提供的C#插件, 以及.Net Core 3.0, 然后就可以开始了 1. 使用VSC打开已经创建好的文件夹( ...

  4. Python真牛逼,获取压缩文件密码,我只要一分钟!

    事情的经过是这样的: 又是奶茶,行吧行吧. 快点开工,争取李大伟回来之前搞定. 李大伟说是6位数字密码 那么我们可以利用python生成全部的六位数字密码 这样,我们就生成了一个从000000到999 ...

  5. 常用注解解析(因为不太明白@component和@configuration写了)

    1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...

  6. 如何使用第三方ui库vant-weapp

    如何使用第三方ui库vant-weapp 1==>创建文件夹demo 2==> 在小程序 中打开 注意 要先在小程序中打开 如果要想在小程序的开发工具中打开某一个 文件夹 要么是空文件夹 ...

  7. 集合系列 Set(八):TreeSet

    TreeSet 是 Set 集合的红黑树实现,但其内部并没有具体的逻辑,而是直接使用 TreeMap 对象实现.我们先来看看 TreeSet 的定义. public class TreeSet< ...

  8. 1+x 证书 Web 前端开发中级理论考试(试卷 8 )含答案

    1+x 证书 Web 前端开发中级理论考试(试卷 8 ) 官方QQ群 转载请注明来源:妙笔生花个人博客http://blog.zh66.club/index.php/archives/438/ 一.单 ...

  9. three.js实现土星绕太阳体系

    概况如下: 1.SphereGeometry实现自转的太阳,土星: 2.RingGeometry实现土星公转轨道: 3.ImageUtils加载球体贴图: 4.canvas中createRadialG ...

  10. 查看Oracle被锁的表以及如何解锁

    注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,db ...