直接上代码把 大体 就是 我如果在aiohttp中使用代{过}{滤}理 ,不管用几个,买代{过}{滤}理的平台就会显示我用了双倍个。 但是实测 线程池多线程什么的 都不会发生这种事。
刚刚使用 协程 不太懂。 哪里重复请求了? 还是写的不对。
[Python] 纯文本查看 复制代码 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()')[0].split('\r\n')
http_proxy = [] # 代{过}{滤}理池
for proxy in proxy_list:
dic = 'http://'+proxy
http_proxy.append(dic)
print(f'提取的代{过}{滤}理 : {dic}')
return http_proxy
这是写的代{过}{滤}理池 从一个平台买的。
[Python] 纯文本查看 复制代码 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 = [asyncio.create_task(crawl(session, url, proxy_auth=proxy_auth))]
await asyncio.wait(tasks)
if __name__ == '__main__':
proxy_list = proxy_pool()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
问题 就是 比方说我这程序这里 提取 一个代{过}{滤}理。
我去平台查看 就会是 我使用了 两个。
不管怎么样都是双倍。 应该是异步的问题但我不知道怎么回事
我实测 用线程池就不会有这种情况。 |