Je souhaite faire une requête Web anonyme en utilisant python 3 avec l'aide de Tor, et je suis ce tutoriel : https://computerscienceandfangs.blogspot.com/2018/04/setting-up-tor-for-windows-10-python-3.html< /a>.

Jusqu'à présent, je teste juste la première partie du code du tutoriel (ci-dessous):

import requests

def get_tor_session():
    session = requests.session()
    # Tor uses the 9050 port as the default socks port
    session.proxies = {'http':  'socks5://127.0.0.1:9050',
                       'https': 'socks5://127.0.0.1:9050'}
    return session

# Make a request through the Tor connection
# IP visible through Tor
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)
# Above should print an IP different than your public IP

# Following prints your normal public IP
print(requests.get("http://httpbin.org/ip").text)

Donc, quand j'exécute le code: print(session.get("http://httpbin.org/ip").text), il devrait me montrer une adresse IP différente de la mienne. Mais à la place, j'obtiens l'erreur:

 File "C:\Program Files\Anaconda3\lib\site-packages\requests\adapters.py", line 43, in SOCKSProxyManager
    try:

InvalidSchema: Missing dependencies for SOCKS support.

J'ai installé les packages ci-dessous selon le tutoriel:

1) demandes d'installation pip - mise à niveau

2) demandes d'installation pip [chaussettes]

3) tige d'installation de pip

J'utilise Windows 7 (64 bits). Spyder pour Python IDE. Python version 3.5.

Deuxième question, qui est plus générale. Je cherche à faire des demandes à plus grande échelle dans le cadre d'un projet de web-scraper. L'approche ci-dessus, en utilisant le tutoriel que j'ai référencé, est-elle toujours une bonne approche (c'est-à-dire coder les choses manuellement en utilisant Python), pour vous assurer de ne pas être banni / sur liste noire? Ou existe-t-il des services plus avancés qui peuvent faire la demande IP anonyme, la rotation IP et la limitation des demandes pour vous, sans que vous ayez à coder votre propre logiciel et à le configurer manuellement, et avec un nombre illimité de demandes?

Merci d'avance.

0
Hazzaldo 19 mars 2019 à 00:49

2 réponses

Meilleure réponse

Pour résoudre l'erreur: InvalidSchema: Missing dependencies for SOCKS support j'ai redémarré le service Tor dans le système d'exploitation Windows, en exécutant ce qui suit en ligne de commande:

tor --service remove

Ensuite

tor --service install -options ControlPort 9051

0
Hazzaldo 30 mars 2019 à 13:01

Exécutez-vous un service tor depuis le cli?

Votre proxy devrait ressembler à ceci:

session.proxies = {'http':  'socks5h://127.0.0.1:9050',
                   'https': 'socks5h://127.0.0.1:9050'}

En outre, les demandes ne sont pas conçues pour effectuer des quantités massives de demandes de la manière que vous décrivez. Je recommanderais d'utiliser la configuration suivante, qui utilise aiohttp, aiohttp_socks et asyncio.

import asyncio, aiohttp
from aiohttp_socks import SocksConnector

async def get_one(url, callback):
    connector = SocksConnector.from_url('socks5://localhost:9050', rdns=True)
    # rdns=True is important!
    # 1) Can't connect to hidden services without it
    # 2) You will make DNS lookup requests using your real IP, and not your Tor IP!
    async with aiohttp.ClientSession(connector=connector) as session:
        print(f'Starting {url}')
        async with session.get(url) as res:
            return await callback(res)

def get_all(urls, callback):
    future = []
    for url in urls:
        task = asyncio.ensure_future(get_one(url, callback))
        future.append(task)

    return future

def test_callback(res):
    print(res.status)

if __name__ == '__main__':
    urls = [
        'https://python.org', 
        'https://google.com',
        #...
    ]

    loop = asyncio.get_event_loop()
    future = get_all(urls, test_callback)
    loop.run_until_complete(asyncio.wait(future))
0
Elrond Supports Monica 18 mars 2019 à 22:11