我正在尝试使用Python编写的爬虫来抓取网站.我想将Tor与Python集成,这意味着我想使用Tor匿名抓取该站点.
我试过这样做.它似乎不起作用.我检查了我的IP,它仍然与我使用tor之前的IP相同.我通过python检查了它.
import urllib2
proxy_handler = urllib2.ProxyHandler({"tcp":"http://127.0.0.1:9050"})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
Run Code Online (Sandbox Code Playgroud) 我在计算机上运行Tor,我需要每隔五分钟更改一次Tor退出节点.例如,如果我通过某个出口节点开始使用Tor,那么在5分钟内我希望Tor更改为具有不同IP地址的退出节点.我怎样才能做到这一点?
据我所知,Tor正在侦听localhost上的端口8051.
我可以将哪些命令发送到此端口以使Tor构建新链,以便我可以获得另一个IP地址?
我有以下脚本使用SocksiPY
和Tor:
from TorCtl import TorCtl
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
import urllib2
import sqlite3
from BeautifulSoup import BeautifulSoup
def newId():
conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="123")
TorCtl.Connection.send_signal(conn, "NEWNYM")
newId()
print(urllib2.urlopen("http://www.ifconfig.me/ip").read())
Run Code Online (Sandbox Code Playgroud)
此代码应更改Tor标识,但它会等待一段时间并发出以下错误:
tuple index out of range
Traceback (most recent call last):
File "template.py", line 16, in <module>
newId()
File "template.py", line 14, in newId
TorCtl.Connection.send_signal(conn, "NEWNYM")
TypeError: unbound method send_signal() must be called with Connection instance as first argument (got NoneType instance instead)
Run Code Online (Sandbox Code Playgroud)
但上面的脚本分为两个独立的脚本: …