暗网信息爬取

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))

猜你喜欢

转载自blog.csdn.net/freeking101/article/details/83722475