吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9309|回复: 33
收起左侧

[Python 转载] 【爬虫】获取上一交易日沪深股票北向资金信息

  [复制链接]
akia1412 发表于 2020-8-17 16:14
本帖最后由 akia1412 于 2020-8-17 16:47 编辑

一、背景
1、我刚开始学python + 我刚开始学做股票 = 练手项目!
2、爬取网站:Eastmoney
     每个交易日日更新上一交易日北向资金信息及三日、五日、月度、季度、年度统计信息
     浏览网址:http://data.eastmoney.com/hsgtcg/list.html

二、动手
1、首先通过浏览器F12找到接口,由于发现接口中有token值,因此尝试比对找到源头。
  结果在data.eastmoney.com页面源码中找到别的token,尝试后发现也可以接入。
  于是第一步就是获取token,代入请求,得到数据response。(请求中的参数已经过多次调试,现在是一次按500条数据分页)

# coding=<encoding name> : # coding=utf-8
import json
import requests
import re
import time
import pandas as pd
from pathlib import Path
from requests.adapters import HTTPAdapter

#模拟请求headers
s = requests.Session()
s.headers = {
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40'
}
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))

#获取token
tokenurl=s.get('http://data.eastmoney.com/')
s1=re.search("token=.*?&",tokenurl.text,flags=0)
token=s1.group(0).replace("token=","").replace("&","")

#发送请求获取数据
lst = []
page = 0
data = ['1']
while data:
    page += 1
    url = 'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token='+token+'&st=ShareSZ&sr=-1&ps=500&p='+ str(page)
    req = s.get(url,timeout=5)
    data = req.json()
    lst = lst + data


2、然后就是存数据,我还没学sql,先用pandas处理数据存为csv文件了。
  由于数据每天更新,所以每天定时爬取的话,先备份一个文件,再存入新的数据。

#备份源数据,更新加入新数据
df_new = pd.DataFrame(lst)
date = time.strftime("%Y%m%d")
name1 = '北向资金数据备份'+ date + '.csv'
my_file1 = Path('./'+ name1)
name2 = '北向资金数据.csv'
my_file2 = Path('./'+ name2)
if my_file1.is_file():
    df_old = pd.read_csv(name1, index_col = 0)
    df = pd.concat([df_new, df_old])
elif my_file2.is_file():
    df_old = pd.read_csv(name2, index_col = 0)
    df_old.to_csv(name1, encoding = 'utf-8-sig')
    df = pd.concat([df_new, df_old])
else:
    df = df_new
df = df.reset_index(drop =True)
df.to_csv(name2, encoding = 'utf-8-sig')

#改表头、调格式,调完存为新文件
df_ren = df.rename({
    'DateType': 'n日数据',
    'HdDate': '数据日期',
    'SCode': '股票代码',
    'SName': '股票名称',
    'HYName': '所属行业板块',
    'HYCode': '行业板块代码',
    'DQName': '所属地区板块',
    'DQCode': '地区板块代码',
    'NewPrice': '当日收盘价(元)',
    'Zdf': '当日涨跌幅(%)',
    'Market': '沪市/深市(1or3)',
    'ShareHold': '当日持股数(股)',
    'ShareSZ': '当日持股市值(元)',
    'LTZB': '当日持股流通股占比',
    'ZZB': '当日持股总占比',
    'LTSZ': '当日流通市值(元)',
    'ZSZ': '当日总市值(元)',
    'ShareHold_Chg_One':'当期增持股数(股)',
    'ShareSZ_Chg_One':'当期增持市值(元)',
    'ShareSZ_Chg_Rate_One':'当期市值增减幅',
    'LTZB_One':'当期流通股占比变动',
    'ZZB_One':'当期总占比变动',
}, axis='columns')
scode = "00000" + df_ren['股票代码'].astype(str)
df_ren['股票代码'] = "'" + scode.str[-6:]
df_ren.to_csv('北向资金数据R.csv', encoding = 'utf-8-sig')


三、结果
  大概截了个图,就是这样:
捕获.PNG
  大部分需要看的信息都在右边没有截到,可以看上述最后一段代码看表头内容。
  缺陷就很明显,尝试过找历史数据,但是没有找到,这个接口只能每天获取前一交易日的数据,局限性就比较大。
  初学者,可能有些地方代码写的绕来绕去可渣,请海涵。
  最后,好评支持一下吧,谢谢^_^

North Cash.zip

1.44 KB, 下载次数: 328, 下载积分: 吾爱币 -1 CB

py文件

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
wp1402247027 + 1 用心讨论,共获提升!
li13557771405 + 1 + 1 我很赞同!
jxt441621944 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Jormungand911 发表于 2021-6-20 14:26
突然想到个问题,看过好多爬虫都是爬的天天基金网、东方财富网的数据,很少看到爬富途牛牛数据的,这是富途牛牛数据不好爬么
华爷 发表于 2020-8-18 17:45
wp1402247027 发表于 2020-8-18 20:04
wanzhenman 发表于 2020-10-2 20:57
楼主@Jack_007 可以获取当天的开盘金额吗??
nicelife729 发表于 2020-10-21 21:15
谢谢分享思路
iomo 发表于 2020-10-22 12:33
l厉害厉害,准备学习!
1427249470 发表于 2020-10-22 15:01
感谢分享,牛皮
朝菌 发表于 2020-10-23 08:43
厉害厉害啊。
feizi2008 发表于 2020-10-23 11:31

谢谢分享哦~很不错刚好需要。
52yxrj 发表于 2020-11-25 05:25
啦咯啦咯啦咯
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表