当前位置: 首页 > article >正文

数据分析异步进阶:aiohttp与Asyncio性能提升

爬虫代理

一、时间轴呈现方案进程

  • 2023-04-01:需求确认
    确定目标:使用aiohttp与Asyncio提升采集性能,目标采集今日头条网站的新闻数据(标题、内容、时间等)。同时要求在程序中加入代理IP、Cookie和UserAgent的设置,保证反爬策略应对得当。
  • 2023-04-02:初步开发与测试
    开发基础异步爬虫框架,实现对目标网站的异步请求。初步测试发现由于目标网站限制措施,直接请求经常返回异常或内容不全。
  • 2023-04-03:故障排查与代理接入
    针对请求失败和响应延迟问题,通过接入爬虫代理,调整代理IP设置,同时补充Cookie和UserAgent信息。测试后部分请求得到正常返回,但在并发量较大时仍有部分超时现象。
  • 2023-04-04:架构优化与性能提升
    对异步任务调度、连接超时和异常捕获进行了优化。改进后的方案显著提升了响应速度和成功率,爬取任务运行稳定。

二、方案分析

在开发过程中遇到的主要问题包括:

  • 直接请求被目标网站防爬机制拦截
    由于今日头条对采集有较高的防护力度,直接请求时会被判定为恶意访问,返回的数据可能为空或错误信息。
    解决方案:
    • 设置合理的Cookie与UserAgent,模拟浏览器正常访问行为。
    • 使用代理IP技术(如爬虫代理),通过代理切换IP,降低单一IP被限制的风险。
  • 异步请求管理与异常捕获不足
    在高并发场景下,网络延迟和异常情况频发,导致部分任务中断。
    解决方案:
    • 采用aiohttp的异步请求和合理的超时设置,保障请求超时能够及时中断。
    • 加强异常捕获和重试机制,确保即使部分请求失败,也不会影响整体任务执行。
  • 性能瓶颈与资源浪费
    未充分利用Asyncio的并发优势,任务调度不够高效。
    解决方案:
    • 优化异步任务调度,合理设置并发数,避免因大量任务同时发起请求而引发连接阻塞。
    • 分析任务执行情况,针对耗时环节进行针对性优化。

三、架构改进方案

经过前期的故障排查,架构改进的核心在于以下几点:

  1. 完善代理IP配置
    将代理IP接入作为全局配置,并支持动态代理池扩展,以应对IP限制风险。
  2. 统一请求头设置
    在代码中统一配置Cookie与UserAgent信息,模拟真实浏览器请求,并在请求前后动态调整以适应目标网站变化。
  3. 异步请求与异常捕获优化
    利用aiohttp与Asyncio构建高性能异步爬虫,设置合理的连接超时和重试机制,确保在高并发场景下的稳定性。
  4. 日志与监控机制
    引入日志记录系统,实时监控请求状态与异常情况,便于故障定位和后续性能调优。

四、示例代码实现

下面是一段示例代码,展示了如何使用aiohttp与Asyncio构建一个异步爬虫,并集成代理IP(参考爬虫代理的配置)、Cookie、UserAgent以及简单的错误处理。
请根据实际情况替换代理域名、端口、用户名、密码与Cookie信息。

import asyncio
import aiohttp# 异步请求函数,爬取今日头条首页内容
async def fetch_news(session, url):# 设置请求头,包括UserAgent和Cookie(根据实际情况替换)headers = {'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','Cookie': 'your_cookie_string_here'}try:# 发送GET请求async with session.get(url, headers=headers) as response:if response.status == 200:# 成功获取页面内容html = await response.text()print("成功获取页面内容")# TODO:在此处解析html,提取新闻标题、内容、时间等信息return htmlelse:print(f"请求失败,状态码:{response.status}")except Exception as e:print(f"请求过程中出现异常:{e}")# 主异步任务入口
async def main():# 目标网站url = "https://www.toutiao.com"# 配置爬虫代理参数(请替换为实际值,参考亿牛云爬虫代理 www.16yun.cn)proxy_url = "http://16YUN:16IP@proxy.16yun.cn:8100"# 设置客户端请求超时时间timeout = aiohttp.ClientTimeout(total=10)# 创建异步会话,设置代理参数async with aiohttp.ClientSession(timeout=timeout) as session:# 使用代理IP发起请求try:# aiohttp支持在请求中指定代理async with session.get(url, proxy=proxy_url) as response:if response.status == 200:html = await response.text()print("使用代理IP成功获取页面内容")# TODO:解析html内容,提取新闻数据else:print(f"代理请求失败,状态码:{response.status}")except Exception as e:print(f"代理请求过程中出现异常:{e}")# 额外测试:直接调用fetch_news函数result = await fetch_news(session, url)print(result)# 启动异步任务
if __name__ == '__main__':asyncio.run(main())

代码说明

  • 代理IP设置:在proxy_url中按照格式 http://用户名:密码@代理域名:端口 配置代理,示例中使用了亿牛云爬虫代理的参考格式。
  • 请求头设置:通过headers参数统一配置UserAgent和Cookie,模拟真实浏览器访问,提升请求成功率。
  • 异步请求与错误捕获:利用aiohttp和Asyncio实现异步请求,并在请求过程中捕获异常,保证在高并发下任务的稳定执行。
  • 数据解析部分:示例代码中预留了解析HTML提取新闻信息的TODO部分,可根据需要引入BeautifulSoup、lxml或正则表达式进一步解析。

五、结语

本文从故障排查的实际场景出发,记录了项目从需求确认、问题排查到架构改进的全过程。在开发过程中,通过合理设置代理IP、Cookie、UserAgent以及优化异步请求流程,有效提升了aiohttp与Asyncio爬虫的性能与稳定性。希望本文提供的方案和示例代码能为各位在实际开发中遇到类似问题时提供借鉴和帮助。

相关文章:

数据分析异步进阶:aiohttp与Asyncio性能提升

一、时间轴呈现方案进程 2023-04-01:需求确认 确定目标:使用aiohttp与Asyncio提升采集性能,目标采集今日头条网站的新闻数据(标题、内容、时间等)。同时要求在程序中加入代理IP、Cookie和UserAgent的设置,…...

《AI大模型趣味实战 》第8集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 2

《AI大模型趣味实战 》第8集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 2 摘要 本文末尾介绍了如何实现新闻智能体的方法。在信息爆炸的时代,如何高效获取和筛选感兴趣的新闻内容成为一个现实问题。本文将带领读者通过P…...

低配电脑畅玩《怪物猎人:荒野》,ToDesk云电脑优化从30帧到144帧?

《怪物猎人:荒野(Monster Hunter Wilds)》自2025年正式发售以来已取得相当亮眼的成绩,仅用三天时间便轻松突破800万销量,目前顺利蝉联周榜冠军;凭借着开放世界的宏大场景和丰富的狩猎玩法,该游戏…...

Leetcode刷题笔记1 图论part03

卡码网 101 孤岛总面积 from collections import deque directions [[0, 1], [1, 0], [0, -1], [-1, 0]] count 0def main():global countn, m map(int, input().split())grid []for _ in range(n):grid.append(list(map(int, input().split())))for i in range(n):if gri…...

【模拟面试】计算机考研复试集训(第十一天)

文章目录 前言一、专业面试1、什么是面向对象编程?2、软件工程的主要模型有哪些?3、Cache和寄存器的区别4、卷积层有哪些参数,它们代表什么?5、你有读博的打算吗?6、你的师兄/姐临近毕业,仍做不出成果&…...

查看自己的公有ip

IP 地址 112.3.88.1** 是一个 公有 IP 地址,而不是私有 IP 地址。 公有 IP 地址 vs 私有 IP 地址 公有 IP 地址: 用于在互联网上唯一标识设备。由互联网服务提供商(ISP)分配。可以在全球范围内路由和访问。例如:112.3.88.156、8.8…...

【js逆向入门】图灵爬虫练习平台 第九题

地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12进入了debugger,右击选择一律不在此处暂停, 点击继续执行 查看请求信息 查看载荷,2个加密参数,m和tt 查看启动器,打上断点 进来 往…...

NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的启动流程 区别: .NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】_vscode webapi-CSDN博客 2、WebApplicationBuilder:是NET6引入的一个类,是建造者模式的典型应用 1>建造者模式的…...

Nginx及前端部署全流程:初始化配置到生产环境部署(附Nginx常用命令)

nginx&前端从初始化配置到部署(xshell) 前言下载nginx前端打包与创建具体文件夹路径配置nginx.nginx.conf文件配置项内容 配置nginx.service文件配置项内容 启动nginx常用nginx命令 前言 目标:在xshell中部署前端包。 第一步&#xff1a…...

python 实现一个简单的window 任务管理器

import tkinter as tk from tkinter import ttk import psutil# 运行此代码前,请确保已经安装了 psutil 库,可以使用 pip install psutil 进行安装。 # 由于获取进程信息可能会受到权限限制,某些进程的信息可能无法获取,代码中已经…...

【AI模型】深度解析:DeepSeek的联网搜索的实现原理与认知误区

一、大模型的“联网魔法”:原来你是这样上网的! 在人工智能这个舞台上,大模型们可是妥妥的明星。像DeepSeek、QWen这些大模型,个个都是知识渊博的“学霸”,推理、生成文本那叫一个厉害。不过,要是论起上网…...

【xiaozhi赎回之路-2:语音可以自己配置就是用GPT本地API】

固件作用 打通了网络和硬件的沟通 修改固件实现【改变连接到小智服务器的】 回答逻辑LLM自定义 自定义了Coze(比较高级,自定义程度比较高,包括知识库,虚拟脚色-恋人-雅思老师-娃娃玩具{可能需要使用显卡对开源模型进行微调-产…...

WX小程序

下载 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.Cl…...

JavaScript案例0322

以下是一些涵盖不同高级JavaScript概念和应用的案例,每个案例都有详细解释: 案例1:实现 Promise/A 规范的手写 Promise class MyPromise {constructor(executor) {this.state pending;this.value undefined;this.reason undefined;this.o…...

Spring boot 3.4 后 SDK 升级,暨 UI API/MCP 计划

PS 写这篇文章后看到 A Deep Dive Into MCP and the Future of AI Tooling | Andreessen HorowitzWe explore what MCP is, how it changes the way AI interacts with tools, what developers are already building, and the challenges that still need solving. https://a1…...

大数据学习(78)-spark streaming与flink

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...

2.企业级AD活动目录架构与设计原则实战指南

一、企业级AD架构核心组件解析 1.1 多域森林架构设计 核心概念&#xff1a; 单域模型&#xff1a;适用于中小型企业&#xff08;<5万用户&#xff09; 多域模型&#xff1a;满足跨国/多部门隔离需求 森林&#xff08;Forest&#xff09;&#xff1a;安全信任边界&#x…...

Linux下JDK1.8安装配置

目录 1.下载完上传到Linux系统中 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 5.查看环境变量是否配置成功 官网下载地址:Java Downloads | Oracle 1.下载完上传到Linux系统中 2.解压JDK压缩包 tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local (解压…...

Python OCR文本识别详细步骤及代码示例

光学字符识别&#xff08;OCR&#xff09;是将图像中的文字转换为可编辑文本的技术。在Python中&#xff0c;我们可以利用多种库实现OCR功能。本文将详细介绍使用Tesseract和EasyOCR进行文本识别的步骤&#xff0c;并提供完整的代码示例。 一、OCR简介 OCR&#xff08;Optical…...

OpenCV 基础模块 Python 版

OpenCV 基础模块权威指南&#xff08;Python 版&#xff09; 一、模块全景图 plaintext OpenCV 架构 (v4.x) ├─ 核心层 │ ├─ core&#xff1a;基础数据结构与操作&#xff08;Mat/Scalar/Point&#xff09; │ └─ imgproc&#xff1a;图像处理流水线&#xff08;滤…...

华为HCIE网络工程师培训选机构攻略

从 官方授权机构 到 性价比黑马&#xff0c;结合价格、师资、通过率等维度&#xff0c;为你筛选出最适合的培训方案。 一、华为官方授权机构&#xff08;优先推荐&#xff09; 华为官方授权机构拥有 真机实验环境考官级讲师&#xff0c;适合预算充足、追求高通过率的学员。 机…...

Linux固定IP方法(RedHat+Net模式)

1、查看当前网关 ip route | grep default 2、配置静态IP 双击重启 3、验证...

210、【图论】课程表(Python)

题目 思路 这道题本质上是一个拓扑排序。每次先统计每个点的入度个数、然后再统计点与点之间的邻接关系&#xff0c;找到入度为0的点作为起始遍历点。之后每遍历到这个点之后&#xff0c;就把这个点后续的邻接关系边的点入度减去一。当某个点入度为0时&#xff0c;继续被加入其…...

使用Python开发自动驾驶技术:车道线检测模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

跟着StatQuest学知识07-张量与PyTorch

一、张量tensor 张量重新命名一些数据概念&#xff0c;存储数据以及权重和偏置。 张量还允许与数据相关的数学计算能够相对快速的完成。 通常&#xff0c;张量及其进行的数学计算会通过成为图形处理单元&#xff08;GPUs&#xff09;的特殊芯片来加速。但还有张量处理单元&am…...

nginx配置https域名后,代理后端服务器流式接口变慢

目录 问题描述原因解决办法 问题描述 使用nginx配置域名和https的ssl证书后&#xff0c;代理后端web服务器&#xff0c;发现流式接口比原来直接用服务器外部ip后端web服务器端口变慢了很多。 原因 在于 HTTP 和 HTTPS 在 Nginx 代理中的处理方式不同。以下几点解释了为什么 …...

前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解锁 JSON 映射的“隐藏规则” &#x1f31f; 嘿&#xff0c;技术冒险家们&#xff01;&#x1f44b; 今天我们要聊一个开发中常见的“坑”&#xff1a;前端传来的 JSON 参数字段名和后端对象字段名不一致&#xff0c;会发生…...

基于springboot的新闻推荐系统(045)

摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机管理新闻推荐系统的方案。文章介绍了…...

2024年数维杯数学建模C题天然气水合物资源量评价解题全过程论文及程序

2024年数维杯数学建模 C题 天然气水合物资源量评价 原题再现&#xff1a; 天然气水合物&#xff08;Natural Gas Hydrate/Gas Hydrate&#xff09;即可燃冰&#xff0c;是天然气与水在高压低温条件下形成的类冰状结晶物质&#xff0c;因其外观像冰&#xff0c;遇火即燃&#…...

Linux与HTTP中的Cookie和Session

HTTP中的Cookie和Session 本篇介绍 前面几篇已经基本介绍了HTTP协议的大部分内容&#xff0c;但是前面提到了一点「HTTP是无连接、无状态的协议」&#xff0c;那么到底有什么无连接以及什么是无状态。基于这两个问题&#xff0c;随后解释什么是Cookie和Session&#xff0c;以…...