python多线程并发采集黄金走势数据

简介: python使用aiohttp 通过设置代理IP,实现多线程并发采集

最近随着硅谷银行破产、瑞信暴雷引发全球金融风险担忧加剧,叠加美联储加息预期放缓,国际金价逼近2000美元/盎司关口。据中国基金报报道,在经历近一个月的震荡下跌后,本周现货黄金价格持续走高,现货黄金收报1989美元/盎司,涨幅3.64%,且已突破2月初的金价高位,创下近11个月以来新高,其中有多重因素影响,不过欧美银行业危机引发市场避险情绪升温是主要推动因素。
QQ图片20230321151421.png

最近也有些关于黄金相关分析的项目需要用到金交所数据,这里直接获取权威的交易数据,上海黄金交易所官网就有历年的交易数据。直接用熟悉的Python写个爬虫自动获取。
首先进行简单的网站分析,找到上海黄金交易所每日行情页列表(首页 > 数据资讯 > 历史行情数据 > 每日行情。分析发现网站还存在反爬机制,对访问的IP的有爬频率限制。所以爬虫程序里面直接python使用aiohttp 通过设置代理IP,多线程并发采集,这样能更高效的获取数据。代理IP最好是选择付费的优质代理服务商,不管是代理的连通率,延迟,速度,带宽都有保证。实现代码如下:

import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
from bs4 import BeautifulSoup

# 定义目标网站和代理服务器的参数
url = "https://www.sge.com.cn/sjzx/mrhqsj"
proxy = "socks5://16yun:16ip@www.16yun.cn:11111"

# 定义异步函数来发送GET请求,并使用代理服务器来连接目标网站
async def fetch(session, url):
    try:
        async with session.get(url) as response:
            # 检查响应状态码是否为200,否则抛出异常
            if response.status != 200:
                raise Exception(f"Bad status code: {response.status}")
            # 返回响应内容的文本格式
            return await response.text()
    except Exception as e:
        # 打印异常信息,并返回None
        print(e)
        return None

# 定义异步函数来处理响应结果,并解析HTML内容
async def parse(html):
    # 如果响应结果不为空,则进行解析操作
    if html is not None:
        # 使用bs4库来创建BeautifulSoup对象,并指定解析器为html.parser
        soup = BeautifulSoup(html, "html.parser")
        # 提取网页中的标题标签,并打印其文本内容
        title = soup.find("title")
        print(title.text)
    else:
        # 否则打印None表示无效结果
        print(None)

# 定义异步函数来统计成功次数,并打印结果
async def count(results):
    # 初始化成功次数为0
    success = 0
    # 遍历所有的结果,如果不为空,则增加成功次数,否则跳过
    for result in results:
        if result is not None:
            success += 1
    # 打印总共的请求数和成功次数    
    print(f"Total requests: {len(results)}")
    print(f"Success requests: {success}")

# 定义异步主函数来创建并运行多个协程任务,并控制并发数量和超时时间等参数    
async def main():
    # 创建一个aiohttp_socks.ProxyConnector对象,用来设置代理服务器的参数    
    connector = ProxyConnector.from_url(proxy)
    # 创建一个aiohttp.ClientSession对象,用来发送HTTP请求,并传入connector参数    
    async with aiohttp.ClientSession(connector=connector) as session:
        # 创建一个空列表,用来存储所有的协程任务        
        tasks = []
        # 循环10000次,每次创建一个fetch函数的协程任务,并添加到列表中        
        for i in range(10000):
            task = asyncio.create_task(fetch(session, url))
            tasks.append(task)
        
        # 使用asyncio.gather函数来收集并执行所有的协程任务,并返回一个包含所有结果的列表        
        results = await asyncio.gather(*tasks)
        
        # 创建一个空列表,用来存储所有的解析任务        
        parse_tasks = []
        
         for result in results:
             parse_task = asyncio.create_task(parse(result))
             parse_tasks.append(parse_task)
             
         await asyncio.gather(*parse_tasks)   
         
         await count(results)

# 在程序入口处调用异步主函数,并启动事件循环         
if __name__ == "__main__":
     asyncio.run(main())
相关文章
|
4天前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
3天前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
11 1
|
4天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
4天前
|
数据采集 Java PHP
使用Python+requests简单实现模拟登录以及抓取接口数据
本文通过Python的requests库演示了如何实现模拟登录和抓取接口数据的过程,包括设置请求头、发送POST请求进行登录以及使用登录后的会话进行GET请求获取数据。
14 1
|
6天前
|
编解码 算法 Linux
Linux平台下RTSP|RTMP播放器如何跟python交互投递RGB数据供视觉算法分析
在对接Linux平台的RTSP播放模块时,需将播放数据同时提供给Python进行视觉算法分析。技术实现上,可在播放时通过回调函数获取视频帧数据,并以RGB32格式输出。利用`SetVideoFrameCallBackV2`接口设定缩放后的视频帧回调,以满足算法所需的分辨率。回调函数中,每收到一帧数据即保存为bitmap文件。Python端只需读取指定文件夹中的bitmap文件,即可进行视频数据的分析处理。此方案简单有效,但应注意控制输出的bitmap文件数量以避免内存占用过高。
|
5天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
6天前
|
数据采集 数据挖掘 数据处理
Python爬虫开发:爬取简单的网页数据
本文详细介绍了如何使用Python爬取简单的网页数据,以掘金为例,展示了从发送HTTP请求、解析HTML文档到提取和保存数据的完整过程。通过这个示例,你可以掌握基本的网页爬取技巧,为后续的数据分析打下基础。希望本文对你有所帮助。
|
6天前
|
开发工具 计算机视觉 Python
大恒相机 - Python 多线程拍摄
大恒相机 - Python 多线程拍摄
17 1
|
1天前
|
消息中间件 SQL Java
实时数仓 Hologres产品使用合集之如何用python将kafka数据写入
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
3天前
|
JSON 缓存 安全
Python pickle 二进制序列化和反序列化 - 数据持久化
Python pickle 二进制序列化和反序列化 - 数据持久化
9 0