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())
相关文章
|
6月前
|
人工智能 安全 调度
Python并发编程之线程同步详解
并发编程在Python中至关重要,线程同步确保多线程程序正确运行。本文详解线程同步机制,包括互斥锁、信号量、事件、条件变量和队列,探讨全局解释器锁(GIL)的影响及解决线程同步问题的最佳实践,如避免全局变量、使用线程安全数据结构、精细化锁的使用等。通过示例代码帮助开发者理解并提升多线程程序的性能与可靠性。
226 0
|
3月前
|
设计模式 缓存 安全
【JUC】(6)带你了解共享模型之 享元和不可变 模型并初步带你了解并发工具 线程池Pool,文章内还有饥饿问题、设计模式之工作线程的解决于实现
JUC专栏第六篇,本文带你了解两个共享模型:享元和不可变 模型,并初步带你了解并发工具 线程池Pool,文章中还有解决饥饿问题、设计模式之工作线程的实现
232 2
|
3月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
372 0
|
4月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
272 5
|
5月前
|
数据采集 消息中间件 并行计算
Python多线程与多进程性能对比:从原理到实战的深度解析
在Python编程中,多线程与多进程是提升并发性能的关键手段。本文通过实验数据、代码示例和通俗比喻,深入解析两者在不同任务类型下的性能表现,帮助开发者科学选择并发策略,优化程序效率。
430 1
|
6月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
6月前
|
数据采集 存储 Java
多线程Python爬虫:加速大规模学术文献采集
多线程Python爬虫:加速大规模学术文献采集
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
369 0
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
318 2
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
321 2

推荐镜像

更多