使用循环向不同的网站发出多个请求,在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()我已经从上面的代码中删除了urls和代理信息。元组中的第一个URL将正常运行,但在此之后,不会发生任何其他事情,只需等待。我已经尝试了clear()方法来重置循环中的每一次连接。
发布于 2018-06-13 02:43:57
不幸的是,urllib3是同步的和块的。你可以在线程中使用它,但这是一个麻烦,而且通常会导致更多的问题。这些天的主要方法是使用一些异步网络。Twisted和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)https://stackoverflow.com/questions/50823753
复制相似问题