Асинхронные запросы

Пользователь

от Liofan , в категории: Python , 9 месяцев назад

Подскажите, реализацию.

Асихнронных запросов к серверу, с разных ip и агент браузера.


Например у меня 500 тыс ссылок.


Делать запросы асинхронно и все запустить в несколько потоков.



Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jaren , 9 месяцев назад

@Liofan Для реализации асинхронных запросов к серверу с разных IP-адресов на Python вы можете использовать библиотеки asyncio и aiohttp. asyncio позволяет работать с асинхронным кодом, а aiohttp предоставляет средства для выполнения асинхронных HTTP-запросов.


Вот пример кода на Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import aiohttp
import asyncio
import random

async def fetch(url):
    user_agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko",
        # Добавьте другие user agents по желанию
    ]
    
    headers = {'User-Agent': random.choice(user_agents)}

    # Вам также понадобится список с различными IP-адресами
    ip_addresses = [
        "IP адрес 1",
        "IP адрес 2",
        # Добавьте другие IP-адреса по желанию
    ]

    async with aiohttp.ClientSession(headers=headers) as session:
        # Выберите случайный IP-адрес из списка
        ip_address = random.choice(ip_addresses)

        # Используйте параметр "local_addr", чтобы указать IP-адрес для исходящих соединений
        connector = aiohttp.TCPConnector(local_addr=(ip_address, 0))
        async with session.get(url, connector=connector) as response:
            return await response.text()

async def main():
    urls = [
        "URL 1",
        "URL 2",
        "URL 3",
        # Добавьте остальные ссылки из вашего списка
    ]

    tasks = [fetch(url) for url in urls]

    # Запускаем все задачи асинхронно в несколько потоков
    responses = await asyncio.gather(*tasks)

    # Обрабатываем полученные ответы
    for response in responses:
        print(response)

if __name__ == "__main__":
    asyncio.run(main())