
背景:星球同学和我说怎么抓取同花顺的财务数据, 我当时一想akshare不是有业绩这玩意么, 后来看了下 那是抓取东方财富的。 同花顺的方法其实可以仿照akshare自己封装一个方法就好了。
现在4月份了,一年一度的业绩快报在披露了,另外25年的一季度业绩预告也在披露。 我们在炒股的时候一定要注意业绩雷。
如果碰到东方集团、汇金科技等这种财务造假、业绩暴雷, 想哭都没地方去。
题外话:
相比业绩雷, 特朗普发起的MY战更是黑天鹅, 看着架势会越演越烈。 昨天晚上看着纳斯达克一度涨了4个多点,一觉醒来, 纳斯达克跌了2个多点。虽然我没买,最高一来一去就6个点财富就这样蒸发了。 昨天晚上睡前还在想,我今天是要抄底还是谨慎呢, 看这样的态势发展, 还是谨慎一点,君子不立危墙之下。 我赶紧看了看2008年 和2018年的K线图,趁着间隙,要不看看毛爷爷的毛选《论持久战》。
有些时候,发觉自己就没有发财命。 4.3的时候,就发现了 养殖 、 国内消费、稀土等的投资机会, 为了防止清明节假期突发幺蛾子, 还是没敢买看着涨起来的养殖,如果当时买了40个点有了吧。 还是赚不到认知外的钱。
from io import StringIO
import pandas as pd
import requests
from bs4 import BeautifulSoup
import py_mini_racer
from akshare.utils.tqdm import get_tqdm
from akshare.datasets import get_ths_js
# Setting up pandas display options
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('display.max_colwidth', 100)
def _get_file_content_ths(file: str = "ths.js") -> str:
"""
获取 JS 文件的内容
:param file: JS 文件名
:type file: str
:return: 文件内容
:rtype: str
"""
setting_file_path = get_ths_js(file)
with open(setting_file_path, encoding="utf-8") as f:
file_data = f.read()
return file_data
def getYeji(symbol: str = "业绩快报", type: str = "2024-12-31"):
js_code = py_mini_racer.MiniRacer()
js_content = _get_file_content_ths("ths.js")
js_code.eval(js_content)
v_code = js_code.call("v")
headers = {
"Accept": "text/html, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"hexin-v": v_code,
"Host": "data.10jqka.com.cn",
"Pragma": "no-cache",
"Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/90.0.4430.85 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
url = "http://data.10jqka.com.cn/funds/ggzjl/field/code/order/desc/ajax/1/free/1/"
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, features="lxml")
raw_page = soup.find(name="span", attrs={"class": "page_info"}).text
page_num = raw_page.split("/")[1]
if symbol == "业绩预告":
url = "https://data.10jqka.com.cn/ajax/yjyg/date/"+type+"/board/YJYZ/field/enddate/ajax/1/free/1/"
if symbol == "业绩快报":
url ="https://data.10jqka.com.cn/ajax/yjkb/date/"+type+"/board/HSAG/field/declaredate/ajax/1/free/1/"
big_df = pd.DataFrame()
tqdm = get_tqdm()
for page in tqdm(range(1, int(page_num) + 1), leave=False):
js_code = py_mini_racer.MiniRacer()
js_content = _get_file_content_ths("ths.js")
js_code.eval(js_content)
v_code = js_code.call("v")
headers = {
"Accept": "text/html, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"hexin-v": v_code,
"Host": "data.10jqka.com.cn",
"Pragma": "no-cache",
"Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/90.0.4430.85 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
r = requests.get(url.format(page), headers=headers)
temp_df = pd.read_html(StringIO(r.text))[0]
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
return big_df
#print(getYeji("业绩预告", "2025-03-31"))
print(getYeji("业绩快报", "2024-12-31"))