首页 > 其他分享 >编写高性能爬虫抓取股票行情数据

编写高性能爬虫抓取股票行情数据

时间:2024-10-31 11:44:01浏览次数:1  
标签:HTTP 股票行情 爬虫 抓取 JSON https com HttpClient

最近给一个私募大佬帮忙做了一些股票交易有关的系统,其中涉及到行情数据抓取的问题,一番摸索之后,把成果在这里做个分享。

我把行情抓取的部分,和一个写手记的小功能,单独拿了出来放在一个小系统里面,可以免费使用:https://rich.shengxunwei.com/

先简单介绍下这个小系统的样子,然后我会详细的解释如何高性能实时抓取股票行情。

可以添加自己关注股票列表,支持股票、场内基金、可转债:

股票详情数据:

场内基金详情数据:

可转债详情数据:

在线演示:https://rich.shengxunwei.com/


行情抓取的数据来源

目前主要的数据来源是几个财经网站,比如东财:

实时行情抓取方法

实时行情抓取的一个核心类是 HttpClient 类,然后只需访问东财的网站即可。

创建 HttpClient

下面的大多数示例都重复使用同一 HttpClient 实例,因此只需配置一次。 要创建 HttpClient,请使用 HttpClient 类构造函数。

// HttpClient lifecycle management best practices:
// https://learn.microsoft.com/dotnet/fundamentals/networking/http/httpclient-guidelines#recommended-use
private static HttpClient sharedClient = new()
{
    BaseAddress = new Uri("https://jsonplaceholder.typicode.com"),
};

前面的代码:

实例化新的 HttpClient 实例作为 static 变量。 根据准则,建议在应用程序的生命周期内重复使用 HttpClient 实例。
将 HttpClient.BaseAddress 设置为 "https://jsonplaceholder.typicode.com"。
发出后续请求时,此 HttpClient 实例将使用基址。 若要应用其他配置,请考虑:

设置 HttpClient.DefaultRequestHeaders。
应用非默认 HttpClient.Timeout。
指定 HttpClient.DefaultRequestVersion。

虽然面向 Android 设备(如 .NET MAUI 开发),但必须将 android:usesCleartextTraffic="true" 添加到 AndroidManifest.xml 中的 。 这将启用明文流量,例如 HTTP 请求;否则由于 Android 安全策略,默认情况下会禁用。 请考虑以下示例 XML 设置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application android:usesCleartextTraffic="true"></application>
  <!-- omitted for brevity -->
</manifest>

HTTP 内容

HttpContent 类型用于表示 HTTP 实体正文和相应的内容标头。 对于需要正文的 HTTP 方法(或请求方法)POST、PUT 和 PATCH,可使用 HttpContent 类来指定请求的正文。 大多数示例演示如何使用 JSON 有效负载准备 StringContent 子类,但还有针对其他内容 (MIME) 类型的其他子类。

  • ByteArrayContent:提供基于字节数组的 HTTP 内容。
  • FormUrlEncodedContent:为使用 "application/x-www-form-urlencoded" MIME 类型编码的名称/值元组提供 HTTP 内容。
  • JsonContent:提供基于 JSON 的 HTTP 内容。
  • MultipartContent:提供使用 "multipart/*" MIME 类型规范进行序列化的 HttpContent 对象的集合。
  • MultipartFormDataContent:为使用 "multipart/form-data" MIME 类型进行编码的内容提供容器。
  • ReadOnlyMemoryContent:提供基于 ReadOnlyMemory 的 HTTP 内容。
  • StreamContent:提供基于流的 HTTP 内容。
  • StringContent:提供基于字符串的 HTTP 内容。
  • HttpContent 类还用于表示 HttpResponseMessage 的响应正文,可通过 HttpResponseMessage.Content 属性访问。

HTTP Get

GET 请求不应发送正文,而是用于(如方法名称所示)从资源检索(或获取)数据。 要在给定 HttpClient 和 URI 的情况下发出 HTTP GET 请求,请使用 HttpClient.GetAsync 方法:

static async Task GetAsync(HttpClient httpClient)
{
    using HttpResponseMessage response = await httpClient.GetAsync("todos/3");
    
    response.EnsureSuccessStatusCode()
        .WriteRequestToConsole();
    
    var jsonResponse = await response.Content.ReadAsStringAsync();
    Console.WriteLine($"{jsonResponse}\n");

    // Expected output:
    //   GET https://jsonplaceholder.typicode.com/todos/3 HTTP/1.1
    //   {
    //     "userId": 1,
    //     "id": 3,
    //     "title": "fugiat veniam minus",
    //     "completed": false
    //   }
}

HTTP Get from JSON

https://jsonplaceholder.typicode.com/todos 终结点返回“todo”对象的 JSON 数组。 这些对象的 JSON 结构如下所示

[
  {
    "userId": 1,
    "id": 1,
    "title": "example title",
    "completed": false
  },
  {
    "userId": 1,
    "id": 2,
    "title": "another example title",
    "completed": true
  },
]

本地计算机或应用程序配置文件可以指定使用默认代理。 如果指定了 Proxy 属性,则 Proxy 属性中的代理设置会覆盖本地计算机或应用程序配置文件,并且处理程序将使用指定的代理设置。 如果未在配置文件中指定代理,并且未指定 Proxy 属性,则处理程序将使用从本地计算机继承的代理设置。 如果没有代理设置,则请求将直接发送到服务器。

标签:HTTP,股票行情,爬虫,抓取,JSON,https,com,HttpClient
From: https://www.cnblogs.com/sheng_chao/p/18517363

相关文章

  • 推荐5个开发人员最常用的高级爬虫软件
    爬虫,又称为网络爬虫或网页爬虫,是一种自动浏览互联网的程序,它按照一定的算法顺序访问网页,并从中提取有用信息。爬虫软件通常由以下几部分组成:- 用户代理(User-Agent):模拟浏览器访问,避免被网站识别为机器人。- 请求处理:发送HTTP请求,获取网页内容。- 内容解析:使用正则表达式或......
  • Java爬虫:在1688上“夺宝奇兵”获取店铺详情
    想象一下,你是一名勇敢的探险家,手持藏宝图,在数字世界的海洋中寻找那传说中的宝藏——1688店铺详情。今天,我们将一起化身为代码界的“夺宝奇兵”,使用Java爬虫技术,揭开1688店铺详情的神秘面纱。准备好你的帽子和鞭子,我们即将启程!背景介绍你是否曾在浏览1688时,对那些神秘的店铺充......
  • 猿人学web端爬虫攻防大赛赛题第17题——天杀的http2.0
    题目网址:https://match.yuanrenxue.cn/match/17解题步骤:老方法,看触发的数据包。只有一个数据包,再看cookie中有没有特殊的字段。没有遇到第13题的特殊字段,直接访问。importrequestsurl="https://match.yuanrenxue.cn/api/match/17?page=1"headers={"user-ag......
  • 爬虫学习3
    目录POST方法向网站发送数据1、客户端post发送数据2、服务器获取post的数据3、get和post的混合使用访问网站的方法有get方法和post方法,今天学习了另一种方法post方法。POST方法向网站发送数据1、客户端post发送数据post方法访问网站时客户端向服务器发送表单数据,表单......
  • 爬虫+数据保存2
    爬取数据保存到MySQL数据库这篇文章,我们来讲解如何将我们爬虫爬取到的数据,进行保存,而且是把数据保存到MySQL数据库的方式去保存。目录1.使用pymysql连接数据库并执行插入数据sql代码(insert)2.优化pymysql数据库连接以及插入功能代码3.爬取双色球网站的数据并保......
  • 爬虫 python
    服务端渲染客户端渲染urllib.request.urlopen(url)还是requests.get(url)取决于具体的需求和上下文。        以下是两者的对比以及如何选择适合自己的工具:功能对比:易用性和API设计:requests:API设计更加人性化,提供了丰富的高级功能,如会话管理、自动重定向......
  • selenium抓取动态网页数据
    1.selenium抓取动态网页数据基础介绍1.1什么是AJAXAJAX(AsynchronouseJavaScriptAndXML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Aj......
  • 深入Python爬虫技术:数据存储与反爬虫策略
    深入Python爬虫技术:数据存储与反爬虫策略在第一篇文章中,我们介绍了Python爬虫的基础知识和简单的网页内容获取方法。接下来,我们将继续深入学习,探讨如何有效地存储爬取的数据,以及应对网站的反爬虫机制。数据存储可以帮助我们积累并组织数据,而反爬虫策略则确保爬虫在不断变化......
  • 购物平台数据抓取实战指南:从API到深度分析
    在当今电商盛行的时代,淘宝、京东、拼多多等购物平台已成为消费者日常购物的主要场所。对于企业、市场分析师及开发者而言,这些平台上的数据无疑是一座宝贵的金矿。本实战指南将带您从API接口出发,一步步实现购物平台数据的抓取、处理到深度分析。一、API接口初探API(Application......
  • 杭州爬虫20-30K
    岗位职责:1、负责设计、开发、维护爬虫系统;2、参与多平台信息的抓取和分析;3、建立完整的数据获取、解析、入库和监控流程,并不断优化迭代完善;4、设计爬虫反屏蔽规则,提升网页抓取的效率和质量;5、利用主流的大数据相关技术,对抓取后的网页数据进行清洗、存储等;并持续优化平台,以便......