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())
点赞
收藏

评论区

加载中...

相关推荐

创建免费ip代理池

     反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级

python爬虫增加多线程获取数据

Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不开Pyt

Nginx反爬虫: 禁止某些User Agent抓取网站

一、概述网站反爬虫的原因不遵守规范的爬虫会影响网站的正常使用网站上的数据是公司的重要资产爬虫对网站的爬取会造成网站统计数据的污染常见反爬虫手段1\.根据IP访问频率封禁IP2\.设置账号登陆时长,账号访问过多封禁设置账号的登录限制,只有登录才能展现内容

Selenium使用代理出现弹窗验证如何处理

部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定

网站反爬之封IP应对措施

作为爬虫工作者爬取数据是基本的技能,在日常获取数据的过程中遇到网站反爬也是家常事,网站的反爬方式有很多,今天我们重点来分析下封IP的行为。这种情况下大家都是很简单的使用代理IP就解决了,但是网上ip代理有很多家,到底选哪家好呢?这里推荐口碑很好的亿牛云

爬虫中使用代理IP的一些误区

做为爬虫工作者在日常工作中使用爬虫多次爬取同一网站时,经常会被网站的IP反爬虫机制给禁掉,为了解决封禁IP的问题通常会使用代理IP。但也有一部分人在HTTP代理IP的使用上存在着误解,他们认为使用了代理IP就能解决一切问题,然而实际上代理IP不是万