1. 程式人生 > >暗網資訊爬取

暗網資訊爬取

 

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