使用循环向多个网站发出多个请求,如何使用urllib3中的代理执行此操作?
代码将读入一个URL元组,并使用for循环连接到每个站点,但是,目前它没有连接到元组中的第一个url。还有一个代理。
list = ['https://URL1.com', 'http://URL2.com', 'http://URL3.com']
for i in list:
http = ProxyManager("PROXY-PROXY")
http_get = http.request('GET', i, preload_content=False).read().decode()
我已从上面的代码中删除了网址和代理信息。元组中的第一个URL运行正常,但在此之后,没有其他任何事情发生,只是等待。我已经尝试了clear()
方法来重置循环中每次的连接。
答案 0 :(得分:0)
不幸的是urllib3是同步和阻止的。您可以将它与线程一起使用,但这很麻烦,通常会导致更多问题。这些天的主要方法是使用一些异步网络。扭曲和asyncio(可能有aiohttp)是受欢迎的软件包。
我将使用trio
框架和asks
:
import asks
import trio
asks.init('trio')
path_list = ['https://URL1.com', 'http://URL2.com', 'http://URL3.com']
results = []
async def grabber(path):
r = await s.get(path)
results.append(r)
async def main(path_list):
async with trio.open_nursery() as n:
for path in path_list:
n.spawn(grabber(path))
s = asks.Session()
trio.run(main, path_list)