大家好,我是辣条。

 抓取目标:

url:http://webapi.cninfo.com.cn/#/marketDataDate
数据目标: 获取 证券代码 证券简称 交易日期  开盘价 最高价 最低价 收盘价 成交数量
难点: 请求头参数mcode 加密生成 

使用第三方库:

1. requests
2. execjs
3. js2py
4. math
5. time
6. pandas

工具:

1. 谷歌浏览器
2. pycharm
3. python3.7

页面分析:

进入页面,鼠标右击,选择检查 -> 弹出浏览器开发者工具 -> Netword -> 选择xhr -> 刷新页面

找到接口,观察接口数据情况:

此接口为post请求,需要提交两个表单参数。

代码片段:

url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1015'
data = {'tdate': datetime,'scode': '399001'
}
headers = {'mcode': 'MTYzNTEzOTkxMQ==','Referer': 'http://webapi.cninfo.com.cn/','Cookie': 'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634795282; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634799860','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
}
response = requests.post(url, headers=headers, data=data).json()

请求成功, 但是有时效性的问题,等过了几分钟后,就无权限访问了,仔细观察发现特殊参数mcode。

开始JS找加密参数生成位置: (注意需要重新刷新页面,不然会出现没有js情况)

问题来了,好几个js文件,怎么确定那个是我们需要的?

使用第二种搜索方式,根据url的请求地址搜索:

打上断点后 直接刷新页面 开始调试

var indexcode={getResCode:function(){var time=Math.floor(new Date().getTime()/1000); return window.JSonToCSV.missjson(""+time);}
}

继续调试,看看这个missjson是干啥的。

下面把这些js扣下来执行

完整代码

import requests
import execjs
import js2py
import math
import time
import pandas as pd
​
​
code_list = []
​
​
def MCODE():jscode = '''function missjson(input) {  var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv"   + "wxyz0123456789+/" + "=";  var output = "";  var chr1, chr2, chr3 = "";  var enc1, enc2, enc3, enc4 = "";  var i = 0;  do {  chr1 = input.charCodeAt(i++);  chr2 = input.charCodeAt(i++);  chr3 = input.charCodeAt(i++);  enc1 = chr1 >> 2;  enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  enc4 = chr3 & 63;  if (isNaN(chr2)) {  enc3 = enc4 = 64;  } else if (isNaN(chr3)) {  enc4 = 64;  }  output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)  + keyStr.charAt(enc3) + keyStr.charAt(enc4);  chr1 = chr2 = chr3 = "";  enc1 = enc2 = enc3 = enc4 = "";  } while (i < input.length);  return output;  } '''time1 = js2py.eval_js('Math.floor(new Date().getTime()/1000)')# py方式a = math.floor(time.time() / 1000)mcode = execjs.compile(jscode).call('missjson', '{a}'.format(a=time1))return mcode
​
​
def PageRquest(datetime, mcode):# 接口可以换url = 'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1015'data = {'tdate': datetime, # 获取数据时间'scode': '399001'  # 股票代码 以及交易所简称}headers = {'mcode': str(mcode),'Referer': 'http://webapi.cninfo.com.cn/','Cookie': 'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634795282; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634799860','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'}response = requests.post(url, headers=headers, data=data).json()code = response['records']for i in code:code_list.append(i)
​
​
def main(date):mcode = MCODE()PageRquest(date, mcode)
​
​
if __name__ == '__main__':# main()# 数据分析 pandas 自动化办公的datetime = pd.period_range('2021/5/1', '2021/10/20', freq='B')for date in datetime:main(date)df = pd.DataFrame(code_list)df.to_excel('code.xlsx')

朋友股票亏惨了,我一怒用Python爬取了证券最新数据相关推荐

  1. Python爬虫教程-Python爬取股票数据过程详解

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...

  2. Python应用实战-Python爬取4000+股票数据,并用plotly绘制了树状热力图(treemap)

    目录: 1. 准备工作 2. 开始绘图 2.1. 简单的例子 2.2. px.treemap常用参数介绍 2.3. color_continuous_scale参数介绍 2.4. 大A股市树状热力图来 ...

  3. python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  4. python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件

    python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件 import requests import pandas as pd# market: 0:沪市 1:深市 # ...

  5. python爬取股票信息_利用Python爬取网易上证所有股票数据(代码

    利用Python爬取网易上证所有股票数据(代码 发布时间:2018-04-14 17:30, 浏览次数:1261 , 标签: Python import urllib.request import r ...

  6. python爬取微信好友_如何用 Python 爬取自己的微信朋友

    原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...

  7. Python爬取‘跌妈不认’股票数据,绘制可视化图

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于可以叫我才哥 ,作者才哥 大家好,上次我们试着用vba在excel中绘制树状热 ...

  8. python爬取沪深所有股票数据并生成Excel文件

    爬取沪深所有股票数据并生成Excel文件 一.分析需求 1.对于沪深两市的各只股票,获取其:'股票代码', '股票名称', '最高', '最低', '涨停', '跌停', '换手率', '振幅', ' ...

  9. 利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

最新文章

  1. Ubuntu Linux下如何配置Android开发环境
  2. 基于matlab的对流层散射信道特性仿真,对流层散射信道建模和FPGA实现
  3. 想懂量子力学?让你养的猫教你
  4. 数据中心行业哪个证书含金量最高?对职业最有帮助?
  5. jvm在不同系统中的最大内存空间地址
  6. 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
  7. Android 之数据传递小结
  8. python的设计哲学是优雅明确简单_Python简单教程
  9. ASP与數据庫,文本文件鏈接精髓
  10. 在Fedora 11中安装Apache2+PHP5+MySQL(LAMP)
  11. 2013年值得我们学习的网页设计作品【系列二】
  12. 利用cca进行fmri分析
  13. 求n!的位数以及求n!具体的值(C or C++)
  14. 物理常量/真空电容率/引力常量/真空磁导率/斯特潘-玻尔兹曼常量
  15. 计算机导论python知识点_每个计算机学生都应该掌握什么
  16. java:文本框的简单使用
  17. 上拉电阻的作用原理_单片机P0口以及上拉电阻
  18. 保监会的权力---满足投保人知情权。
  19. 【SSM框架】【怠惰致错】Invalid bound statement (not found)
  20. 快盘做网站服务器,快盘云服务器地址

热门文章

  1. 在startup中遍历程序集
  2. js中如何优雅的写if判断
  3. Java中 输入字符串的时候next()和nextLine()有什么区别
  4. WinForm高级控件实例--职员信息登记
  5. Android IPC 结篇
  6. 2.重新安装CM服务
  7. [转]Handler学习笔记(一)
  8. UIView方法,属性的集合
  9. RBAC用户角色权限设计方案(转)
  10. [expimp]exp导出笔记