基于 Tor 匿名网络的多 IP 爬虫,tor爬虫,未经作者许可,禁止转载!
基于 Tor 匿名网络的多 IP 爬虫,tor爬虫,未经作者许可,禁止转载!
本文作者: 编橙之家 - 路易十四 。未经作者许可,禁止转载!欢迎加入编橙之家 专栏作者。
基于tor匿名网络的多ip爬虫。更换ip的方式有多种,其中tor这类型则适合ip更换次数不大,网页数据量也不大,但是又厌恶代理那天天失效的麻烦,则最简单快捷的便是使用tor在本机搭建一个出口端口,让需要更换ip的爬虫程序制定proxies指向的端口,简单而且快捷,可使用的ip池子总数1000左右,实际中有500左右可以使用,匿名性当然不用质疑了。
一.测试环境:
- linux ubuntu 16.04
- python 2.7
- 主要包:requests – requesocks
- 需要linux主机本身可以访问外网.自配vpn或者是香港主机也可以是window的电脑装linux的虚拟机,然后window使用vpn或者加速器等.
二.部署方式:
.. 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。
三. python示例代码
方法一:
使用 requesocks
Pythonimport 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算是部署成本最小的,只要你本机能够翻qiang即可拥有500个ip供使用,并且能够保证相当高的匿名性.但是问题也是存在的,如果目标网站网页内容多,或者在抓取的时候使用phantomjs等方式就也一样是网速要求比较高这个时候就需要另外的方式了,比如adsl….ADSL爬虫届的换ip大招
额外的爬虫进阶技术文:
浏览器模拟操作:http://python.jobbole.com/86784/
爬虫分布式技术:传送门redis
相关代码均在github开源项目中.欢迎star和fork.也希望多多指教.
Anti-Anti-Spider
打赏支持我写出更多好文章,谢谢!
打赏作者
打赏支持我写出更多好文章,谢谢!
相关内容
- Python爬虫入门(1):综述,python爬虫,未经作者许可,
- Python爬虫入门(2):爬虫基础了解,python爬虫,未经作
- Python爬虫入门(3):Urllib库的基本使用,pythonurllib,未
- Python爬虫入门(4):Urllib库的高级用法,pythonurllib,未
- Python爬虫入门(5):URLError异常处理,pythonurlerror,未经
- Python爬虫入门(6):Cookie的使用,pythoncookie,未经作者
- Python爬虫入门(7):正则表达式,python爬虫,未经作者
- Python爬虫入门(8):Beautiful Soup的用法,pythonsoup,未经
- Python爬虫实战(1):爬取糗事百科段子,python糗事,未
- Python爬虫实战(2):百度贴吧帖子,python爬虫,未经作
评论关闭