標籤:

基於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?

TAG:Python | 爬虫 |