TorRequests 和 Python - InvalidSchema:缺少 SOCKS 支持的依赖项
TorRequests and Python - InvalidSchema: Missing dependencies for SOCKS support
我想在 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 安装请求[袜子]
3)pip 安装 stem
我正在使用 Windows 7(64 位)。 Python IDE 的 Spyder。 Python 版本 3.5。
第二个问题,比较笼统。作为网络抓取工具项目的一部分,我希望提出更大规模的请求。上面的方法,使用我引用的教程,仍然是一个好的方法(即使用 Python 手动编码),以确保您不会得到 banned/black-listed?或者是否有更高级的服务可以为您进行匿名 IP 请求、IP 轮换和请求限制,而无需您编写自己的软件和手动配置,并且请求数量不受限制?
非常感谢。
你是运行 cli 的 tor 服务吗?
您的代理应如下所示:
session.proxies = {'http': 'socks5h://127.0.0.1:9050',
'https': 'socks5h://127.0.0.1:9050'}
另外,requests 并不是为以您描述的方式发出大量请求而设计的。我建议使用以下设置,它使用 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))
要解决错误:InvalidSchema: Missing dependencies for SOCKS support
我在 Windows OS 中通过 运行 命令行中的以下命令重新启动了 Tor 服务:
tor --service remove
然后
tor --service install -options ControlPort 9051
我想在 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 安装请求[袜子]
3)pip 安装 stem
我正在使用 Windows 7(64 位)。 Python IDE 的 Spyder。 Python 版本 3.5。
第二个问题,比较笼统。作为网络抓取工具项目的一部分,我希望提出更大规模的请求。上面的方法,使用我引用的教程,仍然是一个好的方法(即使用 Python 手动编码),以确保您不会得到 banned/black-listed?或者是否有更高级的服务可以为您进行匿名 IP 请求、IP 轮换和请求限制,而无需您编写自己的软件和手动配置,并且请求数量不受限制?
非常感谢。
你是运行 cli 的 tor 服务吗?
您的代理应如下所示:
session.proxies = {'http': 'socks5h://127.0.0.1:9050',
'https': 'socks5h://127.0.0.1:9050'}
另外,requests 并不是为以您描述的方式发出大量请求而设计的。我建议使用以下设置,它使用 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))
要解决错误:InvalidSchema: Missing dependencies for SOCKS support
我在 Windows OS 中通过 运行 命令行中的以下命令重新启动了 Tor 服务:
tor --service remove
然后
tor --service install -options ControlPort 9051