在爬取網站的時候,
要多的站在對方的角度想問題,
這次教你怎麼偽裝自己的 ip 地址,
別讓對方輕易的就把你給封掉。
如何偽裝呢?
對於 python 來說,
使用代理訪問很簡單,
就拿我們經常使用的 requests 庫來說,
使用代理 ip 如下
定義代理IP
<code>proxie = {
'http' : 'http://xx.xxx.xxx.xxx:xxxx',
'http' : 'http://xxx.xx.xx.xxx:xxx',
....
} /<code>
使用代理
<code>response = requests.get(url,proxies=proxies)/<code>
這樣就可以使用你定義的代理地址去訪問網站了。
代理地址哪裡來
在網上有很多免費的代理,
隨便搜就有一堆了,
不過你知道的,
免費的話很多人都去使用,
所以這些代理IP很不穩定。
如果你有錢的話,
市面上有人就專門提供代理IP的,
直接去買就行了。
不想花錢呢?
可以搞一個IP代理池,
主要就是通過 python 程序去抓取網上大量免費的代理 ip ,
然後定時的去檢測這些 ip 可不可以用,
那麼下次你要使用代理 ip 的時候,
你只需要去自己的 ip 代理池裡面拿就行了。
道理都懂,
但是不想自己弄一個代理池。
有沒有現成的?
不瞞你說,
有一個不錯的開源 ip 代理池。
https://github.com/Python3WebSpider/ProxyPool.git
如何使用呢
首先使用 git clone 將源代碼拉到你本地
<code>git clone https://github.com/Python3WebSpider/ProxyPool.git/<code>
接著打開項目中的 setting.py,
在這裡可以配置相關信息,
比如 Redis 的地址密碼相關,
(如果你之前沒有使用過 redis 的話,可以到如下地址下載 https://github.com/MicrosoftArchive/redis/releases)
接著在你 clone 下來的文件目錄中,
安裝相關所需的 python 模塊:
<code>pip3 install -r requirements.txt/<code>
接下來開啟你的 redis:
redis 的默認端口就是 6379,
接著就可以運行 run.py 了:
<code>代理池開始運行
* Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)
開始抓取代理
獲取器開始執行
Crawling http://www.66ip.cn/1.html
正在抓取 http://www.66ip.cn/1.html
抓取成功 http://www.66ip.cn/1.html 200
成功獲取到代理 201.69.7.108:9000
成功獲取到代理 111.67.97.58:36251
成功獲取到代理 187.32.159.61:51936
成功獲取到代理 60.13.42.154:9999
成功獲取到代理 106.14.5.129:80
成功獲取到代理 222.92.112.66:8080
成功獲取到代理 125.26.99.84:60493
.../<code>
如果你在運行的時候出現這個錯誤:
<code>
更新一下 redis 版本:
<code>pip3 install redis==2.10.6 /<code>
運行 run.py ,
這時候在你的 redis 中就有爬取到的代理 ip 了:
項目跑起來之後,
你就可以訪問你的代理池了,
比如隨機獲取一個代理 ip 地址:
<code>http://localhost:5555/random/<code>
這樣訪問之後就會獲取到一個代理 ip。
在代碼中獲取代理也不在話下啦:
<code>
這樣,
我們就成功的在我們的代理池中獲取代理 ip 了。
那麼下次誰還敢封你ip,
你就拿出你的代理ip,
繼續爬唄!
閱讀更多 程序猿架構 的文章