基于tor匿名网络的多ip爬虫.更换ip的方式有多种,其中tor这类型则适合ip更换次数不大,网页数据量也不大,但是又厌恶代理那天天失效的麻烦,则最简单快捷的便是使用tor在本机搭建一个出口端口,让需要更换ip的爬虫程序制定proxies指向的端口.简单而且快捷,可使用的ip池子总数1000左右,实际中有500左右可以使用,匿名性当然不用质疑了.
.. 2.1 环境准备 ….. 2.1.1 Linux ….. 2.1.2 Python ….. 2.1.3 Tor
══════════
2.1 环境准备 ──────
Linux 操作系统。Windows 部署没有验证。 2.1.1 Linux ╌╌╌╌╌╌╌╌╌╌╌
Linux 各种发行版本均可。以 Ubuntu 为例
2.1.2 Python
┌──── │ sudo apt-get install python-pip └──── ┌──── │ sudo pip install requests │ sudo pip install requesocks └────
╌╌╌╌╌╌╌╌╌ 2.1.3 Tor ┌──── │ sudo apt-get install tor │ sudo /etc/init.d/tor restart └──── 启动后socks监听9050端口。 ┌──── │ tor –hash-password mypassword └──── 生成你的密码,之后编辑/etc/tor/torrc加上
ControlPort 9051
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
让ControlPort监听9051端口,后边那个16:开头的hash就是上一步得到的。
┌──── │ /etc/init.d/tor restart └──── 重启下tor。
方法一:
使用 requesocks
import os
import requests
import requesocks
import time
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()
方法二
pip install PySocks
此可以使用requests的方式发送请求
import socket
import socks
import requests
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
print(requests.get('http://api.ipify.org?format=json').text)
结果是类似的.
要在程序内实现tor更换出口ip则调用下条指令即可
os.system("""(echo authenticate '"mypassword"'; echo signal newnym; echo \
quit) | nc localhost 9051""")
最终,在已知的7种爬虫更换ip的方式中,tor算是部署成本最小的,只要你本机能够访问外国网站即可拥有500个ip供使用,并且能够保证相当高的匿名性.但是问题也是存在的,如果目标网站网页内容多,或者在抓取的时候使用phantomjs等方式就也一样是网速要求比较高这个时候就需要另外的方式了,比如adsl….ADSL爬虫届的换ip大招
额外的爬虫进阶技术文:
浏览器模拟操作:博客上传送门phantomjs 知乎上的传送门 https://zhuanlan.zhihu.com/p/24062137
爬虫分布式技术:博客上传送门redis 知乎上的传送门 https://zhuanlan.zhihu.com/p/24181367
相关代码均在github开源项目中.欢迎star和fork.也希望多多指教.
原创文章,转载请注明: 转载自URl-team
本文链接地址: 基于Tor匿名网络的多ip爬虫