基於Tor網路的多ip爬蟲
基於tor網路的多ip爬蟲.更換ip的方式有多種,其中tor這類型則適合ip更換次數不大,網頁數據量也不大,但是又厭惡代理那天天失效的麻煩,則最簡單快捷的便是使用tor在本機搭建一個出口埠,讓需要更換ip的爬蟲程序制定proxies指向的埠.簡單而且快捷,可使用的ip池子總數1000左右,實際中有500左右可以使用,匿名性當然不用質疑了.
一.測試環境:
- linux ubuntu 16.04
- python 2.7
- 主要包:requests - requesocks
- 自行安裝tor環境
二.部署方式:
.. 2.1 環境準備
..... 2.1.1 Linux..... 2.1.2 Python..... 2.1.3 Tor══════════
2.1 環境準備
──────Linux 操作系統。Windows 部署沒有驗證。
2.1.1 Linux???????????Linux 各種發行版本均可。以 Ubuntu 為例
2.1.2 Python
┌────
│ sudo apt-get install python-pip└────
┌────│ sudo pip install requests│ sudo pip install requesocks└────?????????
2.1.3 Tor┌────│ sudo apt-get install tor│ sudo /etc/init.d/tor restart└────
啟動後socks監聽9050埠。┌────│ tor --hash-password mypassword└────生成你的密碼,之後編輯/etc/tor/torrc加上ControlPort 9051
HashedControlPassword
16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C讓ControlPort監聽9051埠,後邊那個16:開頭的hash就是上一步得到的。
┌────
│ /etc/init.d/tor restart└────重啟下tor。三. python示例代碼
方法一:
使用 requesocks
import osnimport requestsnimport requesocksnimport timennurl = http://api.ipify.org?format=jsonnnndef getip_requests(url):n print "(+) Sending request with plain requests..."n r = requests.get(url)n print "(+) IP is: " + r.text.replace("n", "") nndef getip_requesocks(url):n print "(+) Sending request with requesocks..."n session = requesocks.session()n session.proxies = {http: socks5://127.0.0.1:9050,n https: socks5://127.0.0.1:9050}n r = session.get(url)n print "(+) IP is: " + r.text.replace("n", "")nnndef main():n print "Running tests..."n getip_requests(url)n getip_requesocks(url)n os.system("""(echo authenticate "mypassword"; echo signal newnym; echo n quit) | nc localhost 9051""")n time.sleep(2)n getip_requesocks(url)nnnif __name__ == "__main__":n main()n
結果如圖:
方法二
pip install PySocks
此可以使用requests的方式發送請求
import socketnimport socksnimport requestsnnsocks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)nsocket.socket = socks.socksocketnprint(requests.get(http://api.ipify.org?format=json).text)n
結果是類似的.
要在程序內實現tor更換出口ip則調用下條指令即可
os.system("""(echo authenticate "mypassword"; echo signal newnym; echo n quit) | nc localhost 9051""")n
四.總結
最終,在已知的7種爬蟲更換ip的方式中,tor算是部署成本最小的,只要你本機能夠連接tor即可擁有500個ip供使用,並且能夠保證相當高的匿名性.但是問題也是存在的,如果目標網站網頁內容多,或者在抓取的時候使用phantomjs等方式就也一樣是網速要求比較高這個時候就需要另外的方式了,比如adsl....ADSL爬蟲屆的換ip大招
額外的爬蟲進階技術文:
瀏覽器模擬操作:博客上傳送門phantomjs 知乎上的傳送門 知乎專欄
爬蟲分散式技術:博客上傳送門redis 知乎上的傳送門 知乎專欄
相關代碼均在github開源項目中.歡迎star和fork.也希望多多指教.
Anti-Anti-Spider
推薦閱讀:
※談談梅森旋轉:演算法及其爆破
※Python網路爬蟲(三)- 爬蟲進階
※用半年的時間來開發一個新網站,應該選 PHP 還是 Python?