为了账号安全,请及时绑定邮箱和手机立即绑定

TorRequests 和 Python - InvalidSchema:缺少 SOCKS

TorRequests 和 Python - InvalidSchema:缺少 SOCKS

繁花不似锦 2021-12-09 10:22:55
我想在 Tor 的帮助下使用 python 3 进行匿名 Web 请求,我正在学习本教程:https : //computerscienceandfangs.blogspot.com/2018/04/setting-up-tor-for-windows-10- python-3.html。到目前为止,我只是在测试教程代码的第一部分(如下):import requestsdef 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 Torsession = 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 IPprint(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 轮换和请求限制,而无需您编写自己的软件并手动配置,并且请求数量不受限制?提前谢谢了。
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

解决错误:InvalidSchema: Missing dependencies for SOCKS support我通过在命令行中运行以下命令在 Windows 操作系统中重新启动 Tor 服务:

tor --service remove

然后

tor --service install -options ControlPort 9051


查看完整回答
反对 回复 2021-12-09
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您是否正在从 cli 运行 Tor 服务?


您的代理应如下所示:


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))


查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信