Verwenden Sie einfach Python, um Bestandsdaten zu sammeln, die Tabelle zu speichern und historische Daten zu analysieren

Vorwort

Wenn ByteDance an die Börse geht, wird Boss Zhong der erste reichste Mann meines Landes auf der Welt


Obwohl es noch nicht aufgeführt ist, lernen wir im Voraus, wie man mit Python historische Bestandsdaten analysiert, unsere dicken Schenkel hält und auf den Start wartet ~

Okay, ohne weitere Umschweife beginnen wir direkt mit dem Text.

Vorbereitung

Umweltnutzung

  • Python 3.10-Interpreter
  • PyCharm-Editor

Modulnutzung

  • Anfragen –> Datenanforderungsmodul
  • csv -> CSV-Tabelle speichern
  • Pandas -> kann Excel-Tabellendateien speichern

requests und pandas sind Module von Drittanbietern und müssen manuell installiert werden. Einfach pip install und den Modulnamen hinzufügen.

Fallimplementierungsprozess

Datenquellenanalyse

  1. Klare Anforderungen: Klären Sie die Website und den erfassten Dateninhalt
    – URL: Dieses Ziel
    – Daten: Bestandsdaten

  2. Paketerfassungsanalyse: Um Bestandsdaten zu analysieren, können Sie anfordern, welche URL abgerufen werden kann
    – Öffnen Sie die Entwicklertools: F12 / Klicken Sie mit der rechten Maustaste und überprüfen Sie das Netzwerk und wählen Sie es aus
    – Klicken Sie auf die zweite Datenseite

     请求网址:
     请求方式:
     请求头:
    

Schritte zur Code-Implementierung

  1. Anfrage senden -> Simulieren Sie den Browser, um eine Anfrage an die URL zu senden
  2. Daten abrufen -> Die vom Server zurückgegebenen Antwortdaten abrufen <Gesamte Daten>
  3. Analysieren Sie die Daten –> Extrahieren Sie die Daten, die wir benötigen
  4. Daten speichern -> Tabellendatei speichern < csv / Excel >

Code-Analyse

Formulardatei speichern

  1. csv -> CSV-Modul
  2. Excel -> Pandas-Modul
# 创建文件对象
f = open('股票.csv', mode='w', encoding='utf-8', newline='')
# fieldnames 字段名 表头一行数据 <前面保存字典的键>
csv_writer= csv.DictWriter(f, fieldnames=[
    '股票代码',
    '股票名称',
    '当前价',
    '涨跌额',
    '涨跌幅',
    '年初至今',
    '成交量',
    '成交额',
    '换手率',
    '市盈率(TTM)',
    '股息率',
    '市值',
])
# 写入表头
csv_writer.writeheader()
# 创建一个空列表
content_list = []

Anfrage senden

Simulieren Sie, dass der Browser eine Anfrage an die URL sendet

  • Simulierter Browser: Header fordern Header an
    • Direkt aus den Browser-Entwicklertools kopiert
    • Wörterbuchdatentyp, der ein vollständiges Schlüssel-Wert-Paarformular erstellt
  • Anfrage-URL:
    Direkt aus Browser-Entwicklertools kopieren
  • Anfrage senden:
    erfordert das Anforderungsmodul -> Pip-Installationsanfragen

<Response [200]> Das Antwortobjekt zeigt an, dass die Anfrage erfolgreich ist

# 模拟浏览器
headers = {
    
    
    'Cookie': 's=av17ye9exq; xq_a_token=cf755d099237875c767cae1769959cee5a1fb37c; xq_r_token=e073320f4256c0234a620b59c446e458455626d9; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMTk5NTg4MCwiY3RtIjoxNzAwNTYzOTE3MDU2LCJjaWQiOiJkOWQwbjRBWnVwIn0.EbAa9h0fB9H_sH415f3x8r2CQiKmPbXZMnuKCy401scB1lMQKOffws6WTwPD2UzFWnntYxIQYSJpX509VUYYgCQkZ_bYtLbtYd5PfxLhWx7coauYA4d3x5aZolzB3eP5IthaYAb0Kbj3MPK8LVRBhABpRGr4wajISuABFNezroM_-5dpiOYK7Rk0UXtU2Qhrzxi1BVCgFUhPP-oR_vKenBw5tLzSqa6aO7CukgI7JVb-6LiymuBquE8FE-de8Vs3evai0fvtjiqryrH3EWM3nmDQIayigHRrYo595bD32kUPP4swHF5U2fwbLHTntIRAm9LsXn8sVf-6sUdgHoYZGg; cookiesu=931700563933974; u=931700563933974; device_id=5da9e0ae658f9fcd3d89078312131fb7; Hm_lvt_1db88642e346389874251b5a1eded6e3=1700563934; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1700563934',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
for page in range(1, 58):
    print(f'==============正在采集第{
      
      page}页数据内容==============')
    # 请求网址
    url = f'https://stock.雪球.com/v5/stock/screener/quote/list.json?page={
      
      page}&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha'
    # 发送请求
    response = requests.get(url=url, headers=headers)

Daten abrufen

Holen Sie sich die vom Server zurückgegebenen Antwortdaten <gesamte Daten>

  • Response.text Antworttextdaten abrufen <String>
  • Response.json() Ruft JSON-Antwortdaten ab <JSON-Daten, in den meisten Fällen Wörterbuchdaten>
  • Response.content Ruft binäre Antwortdaten ab <Beim Speichern von Bildern/Videos/Audio/Dateien in bestimmten Formaten>

Analytische Daten

Extrahieren Sie die Daten, die wir benötigen
Die Datenlösungsmethode wird basierend auf dem Erhalten der Daten ausgewählt:
Wörterbuchwertmethode-> Schlüssel-Wert-Paar Wert (Extrahieren Sie entsprechend dem Inhalt auf der linken Seite des Doppelpunkts [Schlüssel] den Inhalt auf der rechten Seite des Doppelpunkts [Wert])

json_data = response.json()  # 返回json字典数据
# for循环遍历
for index in json_data['data']['list'][1:]:
    # 提取数据保存到字典里面, 方便后续保存表格文件
    dit = {
    
    
        '股票代码': index['symbol'],
        '股票名称': index['name'],
        '当前价': index['current'],
        '涨跌额': index['chg'],
        '涨跌幅': index['percent'],
        '年初至今': index['current_year_percent'],
        '成交量': index['volume'],
        '成交额': index['amount'],
        '换手率': index['turnover_rate'],
        '市盈率(TTM)': index['pe_ttm'],
        '股息率': index['dividend_yield'],
        '市值': index['market_capital'],
    }
    # 保存数据
    csv_writer.writerow(dit)
    # 把字典添加到空列表里面
    content_list.append(dit)
    print(dit)

Zeige Ergebnisse

Nachdem Sie die Daten abgerufen und in der Tabelle gespeichert haben

Ich habe den Code für die Teile Datenerfassung und visuelle Analyse gepackt, und Sie können die Visitenkarte am Ende des Artikels abholen.

Visuelle Analyse

import pandas as pd         # 做表格数据处理模块 第三方的
from pyecharts.charts import Bar    # 可视化模块 第三方模块
from pyecharts import options as opts   # 可视化模块里面的设置模块(图表样式)
 
# 1. 读取数据
df = pd.read_csv('股票.csv')
x = list(df['股票名称'].values)
y = list(df['成交量'].values)
 
c = (
    Bar()
    .add_xaxis(x[:10])
    .add_yaxis("成交额", y[:10])
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
    )
    .render("成交量图表.html")
)

Okay, das ist das Ende des heutigen Teilens, bis zum nächsten Mal.

Guess you like

Origin blog.csdn.net/ooowwq/article/details/134585370