From:https://blog.csdn.net/Greepex/article/details/72717057
暗网(深网,不可见网,隐藏网)是指那些储存在网络数据库里、不能通过超链接访问而需要通过动态网页技术访问的资源集合,不属于那些可以被标准搜索引擎索引的表面网络。
动态网页的url不固定,但可以被爬虫爬取,这是第一个点。
由于相关法律风险,本暗网爬虫代码不开源,但我会将我所理解的核心内容记录。
代码环境为ubuntu,使用语言python,使用库urllib2,socks, socket。
这里不用requests库,在参考许多教程如:https://github.com/kennethreitz/requests/issues/3863 后发现,requests似乎无法使用socks5的代理端口,遂弃之
进入暗网的“门”为 TorBrowserb 或者 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
爬虫学习笔记–Tor隐藏Ip
From:https://blog.csdn.net/Qin_xian_shen/article/details/78233969
因为在爬虫时,如果使用了默认的IP 可能导致自己的IP遭到封禁
所以就要隐藏自己的IP
事先说明 爬虫要有度 也要考虑服务器的压力
本篇基于win10
tor的原理
http://www.cnblogs.com/likeli/p/5719230.html
http://blog.csdn.net/whiup/article/details/52317779
https://www.deepdotweb.com/2014/05/23/use-tor-socks5-proxy
1.安装tor浏览器
http://www.theonionrouter.com/projects/torbrowser.html.en
如果进不去网页 那么请自行解决
2.tor的配置请看这篇
https://jingyan.baidu.com/article/adc815137654fbf723bf73b1.html
这样就可以搭建好了tor
python 要安装库
pip install pysocks
pip install stem
import socks
import socket
import requests
socks.set_default_proxy(socks.SOCKS5,"127.0.0.1",9150)
socket.socket = socks.socksocket
a = requests.get("http://checkip.amazonaws.com").text
print a
通过访问:http://checkip.amazonaws.com 会得到一个ip 会发现这个ip已经是隐藏的ip了 。
controller.signal(Signal.NEWNYM)
切换 ip
#coding=utf-8
from stem import Signal
from stem.control import Controller
import socket
import socks
import requests
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
controller = Controller.from_port(port=9151)
controller.authenticate()
socks.set_default_proxy(socks.SOCKS5,"127.0.0.1",9150)
socket.socket = socks.socksocket
total_scrappy_time = 0
total_changeIP_time = 0
for x in range(0,10):
a = requests.get("http://checkip.amazonaws.com").text
print ("第"+str(x+1)+"次IP:"+a)
time1 = time.time()
a = requests.get("http://www.santostang.com/").text
time2 = time.time()
total_scrappy_time = total_scrappy_time + time2-time1
print ("第"+str(x+1)+"次抓取花费时间:"+str(time2-time1))
time3 = time.time()
controller.signal(Signal.NEWNYM)
time.sleep(5)
time4 = time.time()
total_changeIP_time = total_changeIP_time + time4-time3-5
print ("第"+str(x+1)+"次更换IP花费时间: "+str(time4-time3-5))
print ("平均抓取花费时间:"+str(total_scrappy_time/10))
print ("平均更换IP时间:"+str(total_changeIP_time/10))