TorRequests и Python - InvalidSchema: отсутствуют зависимости для поддержки SOCKS - PullRequest
0 голосов
/ 19 марта 2019

Я хочу сделать анонимный веб-запрос с использованием Python 3 с помощью Tor, и я следую этому руководству: https://computerscienceandfangs.blogspot.com/2018/04/setting-up-tor-for-windows-10-python-3.html.

Пока я просто тестирую первую часть учебного кода (ниже):

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)

Поэтому, когда я выполняю код: print(session.get("http://httpbin.org/ip").text), он должен показывать мне другой IP-адрес. Однако вместо этого я получаю ошибку:

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

InvalidSchema: Missing dependencies for SOCKS support.

Я установил нижеприведенные пакеты в соответствии с руководством:

1) запросы на установку pip - обновление

2) запросы на установку pip [socks]

3) стержень для установки в трубу

Я использую Windows 7 (64-разрядная версия). Spyder для Python IDE. Python версия 3.5.

Второй вопрос, который носит более общий характер. Я рассчитываю делать запросы в большем масштабе как часть проекта для веб-скребка. Является ли описанный выше подход с использованием учебника, на который я ссылался, все еще хорошим подходом (т. Е. Кодирование вещей вручную с использованием Python), чтобы гарантировать, что вас не забанят / не внесут в черный список? Или существуют ли более продвинутые сервисы, которые могут выполнять анонимный IP-запрос, ротацию IP-адресов и регулирование запросов для вас без необходимости кодировать собственное программное обеспечение и настраивать его вручную, а также с неограниченным количеством запросов?

Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Чтобы устранить ошибку: InvalidSchema: Missing dependencies for SOCKS support Я перезапустил службу Tor в ОС Windows, запустив в командной строке следующее:

tor --service remove

тогда

tor --service install -options ControlPort 9051

0 голосов
/ 19 марта 2019

Вы пользуетесь сервисом tor из cli?

Ваш прокси должен выглядеть так:

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

Кроме того, запросы не предназначены для массового количества запросов, как вы описываете. Я бы порекомендовал использовать следующую настройку, которая использует aiohttp, aiohttp_socks и 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))
...