python使用aiohttp通过设置代理爬取基金数据

简介: python使用aiohttp通过设置代理爬取基金数据

说到python爬虫,我们就会想到它那强大的库,很多新手小白在选择框架的时候都会想到使用Scrapy,但是仅仅停留在会使用的阶段。在实际爬虫过程中遇到反爬机制是再常见不过的,今天为了增加对爬虫机制的理解,我们就通过手动实现多线程的爬虫过程,同时引入IP代理池进行基本的反爬操作。
这里我们就以天天基金数据为实际项目,该网站具有反爬机制,同时数量足够大,多线程效果较为明显。所以这里需要使用的到的技术路线有
IP代理池
多线程
爬虫与反爬
通过基础的分析天天基金网的一些数据。经过抓包分析,可知:./fundcode_search.js包含所有基金的数据,同时,该地址具有反爬机制,多次访问将会失败甚至封IP的情况。分析完天天基金网的数据后,我们选择使用搭建IP代理池,用于反爬作用。代理池直接通过代理厂家提供就可以,有太多的代理很多同学不知道怎么选择,经过多年爬虫经验和使用代理的经验这里推荐亿牛云代理,长期使用不管是代理质量还是售后服务都是优于其他代理长家的。
搭建完IP代理池后,我们开始着手多线程爬取数据的工作。一旦使用多线程,就需要考虑到一些爬取中会出现的问题。接下来的实际就是,python使用aiohttp 通过设置代理IP获取数据的过程:
```# 导入相关库
import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
from bs4 import BeautifulSoup

定义目标网站和代理服务器的参数

url = "http://fund.eastmoney.com/fund.html#os_0;isall_0;ft_;pt_1"
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())
```

相关文章
|
7天前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
156 1
|
8天前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
145 0
|
9天前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
17天前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
27天前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
1月前
|
数据采集 数据可视化 关系型数据库
基于python大数据的电影数据可视化分析系统
电影分析与可视化平台顺应电影产业数字化趋势,整合大数据处理、人工智能与Web技术,实现电影数据的采集、分析与可视化展示。平台支持票房、评分、观众行为等多维度分析,助力行业洞察与决策,同时提供互动界面,增强观众对电影文化的理解。技术上依托Python、MySQL、Flask、HTML等构建,融合数据采集与AI分析,提升电影行业的数据应用能力。
|
1月前
|
数据可视化 大数据 数据挖掘
基于python大数据的招聘数据可视化分析系统
本系统基于Python开发,整合多渠道招聘数据,利用数据分析与可视化技术,助力企业高效决策。核心功能包括数据采集、智能分析、可视化展示及权限管理,提升招聘效率与人才管理水平,推动人力资源管理数字化转型。
|
Python
Python 获取天天基金排行
Python 获取天天基金排行
265 0
|
1月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
201 102
|
1月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
206 104

推荐镜像

更多