首先要感谢舍友大佬提供的ShadowsocksR以及相应配置。感谢在本阶段帮助过我的学长学姐,谢谢。
暗网(深网,不可见网,隐藏网)是指那些储存在网络数据库里、不能通过超链接访问而需要通过动态网页技术访问的资源集合,不属于那些可以被标准搜索引擎索引的表面网络。
动态网页的url不固定,但可以被爬虫爬取,这是第一个点。
由于相关法律风险,本暗网爬虫代码不开源,但我会将我所理解的核心内容记录。
代码环境为ubuntu,使用语言python,使用库urllib2,socks, socket。
这里不用requests库,在参考许多教程如https://github.com/kennethreitz/requests/issues/3863/ 后发现,requests似乎无法使用socks5的代理端口,遂弃之
进入暗网的“门”为TorBrowser或者Tor
注意:torbrowser和tor并非一个东西,torbrowser是基于火狐浏览器的洋葱浏览器,通常用来做暗网入口,而且一般情况下已经足够了,但由于需要代码环境,我使用了纯Tor
以下是我的搭建步骤:
一,安装配置Tor
在ubuntu命令行输入
sudo apt-get install tor
/etc/init.d/tor restart
启动后socks监听9050端口。
tor --hash-password mypassword
用来输入你的密码
编辑/etc/tor/torrc
在其中加上
ControlPort 9051
RunAsDaemon 1
Socks5Proxy 127.0.0.1:1080
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
让ControlPort监听9051端口,后边那个16:开头的hash就是上一步得到的。Socks5Proxy是可以使shadowsocks为tor的前端代理(我使用的shadowsocks的端口为1080)
最后重启tor
/etc/init.d/tor restart
(经过曲折的一番探索,可以基本断定,python的stem库控制tor,并不是控制tor浏览器,而是可以利用tor作为自己的匿名代理,或者监视tor的流量走向。stem库目测不能为暗网爬虫做出什么贡献)
二,设置前端代理shadowsocks
这一段本应该放在最前面,但由于本人的shadowsocks完全依靠了舍友的鼎力帮助,这一段还需要往后自己探索。
就本人理解,shadowsocks作为前端代理最主要的功能就是翻墙。。。
对外提供端口为1080。
三,利用Tor的9050端口爬取暗网。
使用urllib2库,socks库作为socks5代理,示例代码如下:
import socket
import socks
import urllib2
ipcheck_url = 'http://checkip.amazonaws.com/'
# Actual IP.
print(urllib2.urlopen(ipcheck_url).read())
# Tor IP.
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
socket.socket = socks.socksocket
print(urllib2.urlopen(ipcheck_url).read()
该代码引用自https://stackoverflow.com/questions/1096379/how-to-make-urllib2-requests-through-tor-in-python
四,总结
tor的本质也是一种socks5代理。所以爬取暗网信息的一个流程就是:
1,我们使用Tor的9050端口(如果你使用的是TorBrowser的话,对外监听端口为9150)
2,Tor使用shadowsocks的1080端口(翻墙)
3,代码环境,爬取内容。
参考博客、论文如下:
【1】http://zzi.io/?p=328
【2】https://github.com/kennethreitz/requests/issues/3863
【3】https://stackoverflow.com/questions/1096379/how-to-make-urllib2-requests-through-tor-in-python
【4】http://blog.csdn.net/yanzi1225627/article/details/51285075