Python爬虫-代理篇-TOR
Tor介绍
TOR是全球有名的匿名网络,具有很高的匿名性,简单点说,Tor网络利用流量转发的方式,达到隐藏真实请求端(客户端)的目的,是目前比较受欢迎也比较有名气的的匿名工具。其原理图如下
由于出口IP随机轮换,且具有很强的匿名性,因此我们可以使用Tor网络作为爬虫代理,用来解决一些网站的IP封禁问题。
Tor的安装和使用
Tor安装
sudo apt-get install tor
重启
sudo /etc/init.d/tor restart
生成密码
tor –hash-password mypassword
这个操作会生成一个Hash串
修改配置文件
命令 vim /etc/tor/torrc
- ControlPort 9051
- HashedControlPassword
16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
Python使用Tor
Python2
sudo pip install requests
sudo pip install requesocks
#!/usr/bin/python
#coding:utf-8
import os
import requesocks
import socks
import socket
import requests
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
url = 'http://api.ipify.org?format=json'
def getip_requests(url):
print "(+) Sending request with plain requests..."
r = requests.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def getip_requesocks(url):
print "(+) Sending request with requesocks..."
session = requesocks.session()
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
r = session.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def main():
print "Running tests..."
getip_requests(url)
getip_requesocks(url)
os.system("""(echo authenticate '"mypassword"'; echo signal newnym; echo \ quit) | nc localhost 9051""")
time.sleep(2)
getip_requesocks(url)
if __name__ == "__main__":
main()
Python3
sudo pip3 install pysocks
#!/usr/bin/python3
import requests
import time
import sys
import socket
import socks
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
# 使用requests包进行常规请求即可
Python Tor管理包 stem
- 包官方文档
- 该包Python2和Python3均可以使用
- pip install stem / sudo apt-get install python-stem
from stem import Signal
from stem.control import Controller
# signal TOR for a new connection
def renew_connection():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)
注意:
- 需要更换IP的时候,需要重新新建Session对象
- 使用stem包,要求必须设施密码(修改配置文件:ControlPort和HashedControlPassword)
关于更换Tor IP
亲测最简单也最有效的切换IP方式就是直接重启
import os os.system('sudo /etc/init.d/tor restart')
总结
- 我们可以使用Tor网站,解决一些网站的IP封禁问题
- Tor网络请求数据会经过多次转发, 且服务器大多位于国外,导致请求速度慢,如果一次请求数据太多,并不建议使用Tor网络作为代理
- Tor可用的出口节点IP不多
- 使用Tor网络作为代理,可以访问‘暗网’数据
文档仅作学习和记录使用,请不要用于商业和违法用途,如有侵权,请告知删除。