@zasara

Как менять прокси для каждого запроса при парсинге?

Как можно проходить по списку / словарю items с прокси в цикле в асинхронном парсинге?
Вот код:
proxies = [proxy1, proxy2]
result = []
async def x_get(session, t: str):
    url = f'...={t}'
    async with session.get(url, ssl=False) as resp:
        resp_json = await resp.json()
        result.append(resp_json)
        
async def x_scraper():
    items = [['ttt', 'yyy'], ['rrr', 'kkk'], ['lll', 'fff'], ['ggg', 'hhh']]
    async with aiohttp.ClientSession() as session:
    tasks = []
    for item in items:
        for t in item:
            task = asyncio.create_task(x_get(session, t))
            tasks.append(task)
    await asyncio.gather(*tasks)


Как сделать так, чтобы перый список парсился через первое прокси, второй список через второе прокси, третий снова через первое, четвертый через второе прокси и тд? Списков много, а прокси 2

Можно сделать несколько функций get, но когда прокси много, это становится не очень удобным
proxy1 = ...
proxy2 = ...

result = []
async def x1_get(session, t: str):
    url = f'...={t}'
    async with session.get(url, ssl=False, proxy=proxy1) as resp:
        resp_json = await resp.json()
        result.append(resp_json)
async def x2_get(session, t: str):
    url = f'...={t}'
    async with session.get(url, ssl=False, proxy=proxy2) as resp:
        resp_json = await resp.json()
        result.append(resp_json)
        
async def x_scraper():
    items = [['ttt', 'yyy'], ['rrr', 'kkk'], ['lll', 'fff'], ['ggg', 'hhh']]
    async with aiohttp.ClientSession() as session:
    tasks = []
	for t in items[0]:
		task = asyncio.create_task(x1_get(session, t))
		tasks.append(task)
	for t in items[1]:
		task = asyncio.create_task(x2_get(session, t))
		tasks.append(task)
	for t in items[2]:
		task = asyncio.create_task(x1_get(session, t))
		tasks.append(task)
	for t in items[3]:
		task = asyncio.create_task(x2_get(session, t))
		tasks.append(task)
    await asyncio.gather(*tasks)
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
zasara, за вас тут делать не будут, скорее всего. Вам хорошо бы разобраться с рекомендованными Влад Григорьев типами, методами и функциями, попробовать сделать код с их использованием.

Коротко говоря: при помощи dict, list, tuple, zip и for можно:
сложить все исходные адреса проксей в список;
В ходе обработки одной функцией get пройтись по списку и полученные результаты можно затем при необходимости либо zip-ом сцепить с исходным списком, либо в словарь, либо ещё как-то, в зависимости от дальнейшей цели.

Основная проблема в том, что вы не понимаете основ, а без них вам дальше далеко не уйти. Изучайте python.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы