TorRequests 和 Python - InvalidSchema:缺少 SOCKS

我想在 Tor 的帮助下使用 python 3 进行匿名 Web 请求,我正在学习本教程: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)pip安装茎


我使用的是 Windows 7(64 位)。用于 Python IDE 的 Spyder。Python 3.5 版。


第二个问题,更笼统。我希望在更大范围内提出请求,作为网络爬虫项目的一部分。上面的方法,使用我引用的教程,仍然是一个很好的方法(即使用 Python 手动编码),以确保您不会被禁止/列入黑名单?或者是否有更先进的服务可以为您执行匿名 IP 请求、IP 轮换和请求限制,而无需您编写自己的软件并手动配置,并且请求数量不受限制?


提前谢谢了。


繁花不似锦
浏览 234回答 2
2回答

慕码人8056858

解决错误:InvalidSchema: Missing dependencies for SOCKS support我通过在命令行中运行以下命令在 Windows 操作系统中重新启动 Tor 服务:tor --service remove然后tor --service install -options ControlPort 9051

慕田峪9158850

您是否正在从 cli 运行 Tor 服务?您的代理应如下所示:session.proxies = {'http':  'socks5h://127.0.0.1:9050',                   'https': 'socks5h://127.0.0.1:9050'}此外,请求并非旨在以您描述的方式发出大量请求。我会建议使用以下设置,使用aiohttp,aiohttp_socks和asyncio。import asyncio, aiohttpfrom aiohttp_socks import SocksConnectorasync 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 futuredef 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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python