Wxylkxy 发表于 2021-8-24 21:48

asyncio 中的待理问题

直接上代码把大体 就是 我如果在aiohttp中使用代{过}{滤}理 ,不管用几个,买代{过}{滤}理的平台就会显示我用了双倍个。 但是实测 线程池多线程什么的 都不会发生这种事。
刚刚使用 协程 不太懂。 哪里重复请求了? 还是写的不对。
import requests
from lxml import etree

def proxy_pool():
    q = input('输入想从代{过}{滤}理池中取出多少ip?\n' )
    url = f'http://t.ipjldl.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty={q}&time=1&pro=&city=&port=1&format=txt&ss=1&css=&dt=1&specialTxt=3&specialJson=&usertype=14'
    headers = {
      'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                     'Chrome/91.0.4472.101 Safari/537.36')
    }
    page_text = requests.get(url=url, headers=headers).text
    tree = etree.HTML(page_text)
    proxy_list = tree.xpath('//body//text()').split('\r\n')
    http_proxy = []# 代{过}{滤}理池
    for proxy in proxy_list:
      dic = 'http://'+proxy
      http_proxy.append(dic)
      print(f'提取的代{过}{滤}理 : {dic}')
    return http_proxy

这是写的代{过}{滤}理池 从一个平台买的。
import aiohttp
import asyncio
from proxy import proxy_pool
import random

async def crawl(session, url, proxy_auth):
    try:
      async with session.get(url=url, proxy=random.choice(proxy_list),proxy_auth=proxy_auth) as response:
            print(await response.text())
            print('success')

    except Exception as e:
      print(e)
      print('error')


async def main():
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
      proxy_auth = aiohttp.BasicAuth('xxxxx', 'xxxxx')
      url = 'https://httpbin.org/ip'
      tasks =
      await asyncio.wait(tasks)

if __name__== '__main__':
    proxy_list = proxy_pool()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

问题 就是 比方说我这程序这里 提取 一个代{过}{滤}理。
我去平台查看 就会是 我使用了 两个。
不管怎么样都是双倍。 应该是异步的问题但我不知道怎么回事
我实测 用线程池就不会有这种情况。
页: [1]
查看完整版本: asyncio 中的待理问题