# 导入相关库
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())
2023-06-15 16:19
- 上一篇: python爬取共享单车悄然涨价大众的评论数据
- 下一篇: python爬虫中“动态网页”如何爬取
评论
博主资料
- 小淘米
- 原创:120 篇
- 转载:0 篇
- 译文:0 篇
- 热度:4.3W
文章存档
- 2024年11月(2)
- 2024年10月(3)
- 2024年09月(2)
- 2024年08月(4)
- 2024年07月(3)
- 2024年06月(2)
- 2024年05月(3)
- 2024年04月(2)
- 2024年03月(1)
- 2024年01月(1)
- 2023年12月(1)
- 2023年11月(1)
- 2023年10月(1)
- 2023年08月(2)
- 2023年07月(1)
- 2023年06月(2)
- 2023年04月(2)
- 2023年03月(2)
- 2023年02月(3)
- 2022年12月(2)
- 2022年11月(3)
- 2022年10月(2)
- 2022年07月(1)
- 2022年06月(2)
- 2022年05月(2)
- 2022年04月(3)
- 2022年01月(1)
- 2021年10月(1)
- 2021年09月(4)
- 2021年08月(1)