import asyncio
import aiohttp
import threading
from collections import Counter
# 定義一個全局變量,用於存儲分類結果
categories = Counter()
# 定義一個函數,用於根據文本內容進行分類
def classify(text):
# 這裏可以使用任何文本分類的方法,例如正則表達式、機器學習等
# 這裏爲了簡單起見,只使用了簡單的字符串匹配
if "Python" in text:
return "Python"
elif "Java" in text:
return "Java"
elif "C++" in text:
return "C++"
else:
return "Other"
async def fetch_page(url, proxy):
# 創建一個 aiohttp 的 ClientSession 對象,並指定代理IP和端口
async with aiohttp.ClientSession(proxy=proxy) as session:
# 使用 session.get 方法發送請求,並獲取響應對象
async with session.get(url) as response:
# 返回響應的文本內容
return await response.text()
async def main():
urls = ["https://www.baidu.com/s?wd=" + str(i) for i in range(10)] # 生成十個百度搜索網址
# 假設有一個文件 16yun.txt,每行存儲一個代理host和端口,例如 www.16yun.cn:3333
# 讀取文件中的所有代理,並存儲在一個列表中
with open("16yun.txt") as f:
proxies = [line.strip() for line in f]
tasks = [] # 創建一個空列表,用於存儲 task 對象
# 遍歷 urls 和 proxies 列表,爲每個 url 配對一個 proxy,並創建 task 對象
for url, proxy in zip(urls, proxies):
task = asyncio.create_task(fetch_page(url, proxy))
tasks.append(task)
results = await asyncio.gather(*tasks) # 同時運行所有 task 並獲取結果
# 創建一個線程池,用於執行分類任務
pool = threading.ThreadPoolExecutor(max_workers=4)
for result in results:
print(result[:100]) # 打印每個網頁的前 100 個字符
# 使用線程池提交一個分類任務,並更新全局變量 categories
category = pool.submit(classify, result).result()
categories[category] += 1
# 關閉線程池並等待所有任務完成
pool.shutdown(wait=True)
# 打印最終的分類結果
print(categories)
asyncio.run(main()) # 運行主協程