暗網資訊爬取
From:https://blog.csdn.net/Greepex/article/details/72717057
暗網(深網,不可見網,隱藏網)是指那些儲存在網路資料庫裡、不能通過超連結訪問而需要通過動態網頁技術訪問的資源集合,不屬於那些可以被標準搜尋引擎索引的表面網路。
動態網頁的url不固定,但可以被爬蟲爬取,這是第一個點。
由於相關法律風險,本暗網爬蟲程式碼不開源,但我會將我所理解的核心內容記錄。
程式碼環境為ubuntu,使用語言python,使用庫urllib2,socks, socket。
這裡不用requests庫,在參考許多教程如:
進入暗網的“門”為 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))