大家好,又見面了,我是全棧君。
代碼是正經代碼,但是程式員正不正經就不知道了。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcuEWNilTZwEWOxkjYjVWOiVDN3UTYiZmYxUjMjR2NyY2Nvw1NzUzMyIDOtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
前言
在使用爬蟲對某些網站進行爬取時,為了不讓網站發現我們的ip,模拟其他使用者ip位址去通路網站。也就相當于間接的去通路網站,流程如圖:
我們使用到代理伺服器,去間接通路網絡,并通過代理傳回資料。而不是走直接通路這條流程。
正文閱讀
第一、什麼是代理伺服器
代理伺服器(Proxy Server)的功能是代理網絡使用者去取得網絡資訊。形象地說,它是網絡資訊的中轉站,是個人網絡和Internet服務商之間的中間代理機構,負責轉發合法的網絡資訊,對轉發進行控制和登記。
第二、Requests請求使用代理。
在已經知道一個代理ip之後,我們如何使用呢?
import requests
response=requests.get("http://www.baidu.com",proxies={"http":"127.0.0.1:1245"})
print(response.text)
複制
在使用requests子產品去請求接口時,便可以通過參數proxies 來進行傳輸,将所需要的代理ip進行設定。
複制
第三、本地計算機如何使用代理伺服器。
已經學會了如何請求接口時,添加代理,那如何為本地結算機設定代理呢。
找到我們的代理ip,然後按照下面的操作進行。
方法1:手動設定代理
1、按win鍵,或者打開ie浏覽器
2、搜尋internet選項,或者在ie浏覽器右上角設定選擇internet選項。
3、點選連接配接,找到區域網路設定
4、勾選代理,并設定ip位址,端口。
這樣,我們就成功設定了代理,接下來通路的所有資料都會傳輸到這個代理ip中。
方法2:直接使用指令行修改
這麼修改也太麻煩了一點,直接使用指令行來解決是不是要簡單一點呢?
設定代理:
@echo off
echo 設定代理伺服器……
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "39.106.223.1342:80" /f
start iexplore.exe
Pause
複制
取消代理:
@echo off
echo 取消代理伺服器……
reg add "hkcu\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0x0 /f
start iexplore.exe
Pause
複制
這裡為什麼要啟動一下ie浏覽器呢?主要是為了讓我們的配置生效,找了一些方法都不能生效,啟動一下ie浏覽器生效比較快,還簡單。
第四、驗證計算機代理ip是否有用,伺服器接收情況。
我們已經設定成功了,那我們通路網站時是否有效呢?抱着這個因為,我們繼續來往下看。
需要做驗證,那我們需要用到服務端。當我們請求伺服器時,顯示的ip,我們就可以知道是否生效。
伺服器端:我們需要在伺服器端搭建一個簡易網站,我們可以通過伺服器列印的日志看出目前請求的ip,這裡我們使用的是windows伺服器,如果有興趣研究學習的,可以先花五十元,去買一個月那種便宜的伺服器玩一下。當然用途不隻是研究本課題,還有其他用途。
代碼如下:
from flask import *
app = Flask(__name__)
@app.route('/')
def index():
ip = request.remote_addr#擷取使用者ip
return "你的ip為"+ip
if __name__ == '__main__':
app.run(host="0.0.0.0",port=8088)#0000,允許所有使用者通路,127.0.0.1允許本地使用者通路。
複制
這裡,使用我的伺服器ip便可以通路,http://123.207.31.148:8088/,網站:http://www.djyqxbc.vip當我們通路這個連結,然後就可以查詢到ip。
1、原始ip
使用者端顯示:
伺服器端請求情況:
Ok,成功擷取到我們的ip,接下來,我們換一個代理ip試一下。
2、代理ip
我們使用代理ip為58.240.52.114:80。
使用者端顯示:
伺服器端顯示情況:
我們可以通過這個簡單的例子看出,我們本地使用的代理ip是生效的,那使用requests子產品請求呢,如圖,我們可以看到,是相同的結果。那說明代理ip對于伺服器端來說,的确能起到掩蓋ip的作用。
第五、Fiddle代理,安全,以及相關工具。
在本地設定代理方法有很多,比如上面提到的第三條。然後還有:
Fiddle工具,如圖,我們可以通過設定代理端口來設定,本地請求的資料,都會發送到127.0.0.1:8888:
Fiddle隻是其中一個,也是我們測試同學常用的一個軟體。另外還有jmeter也同樣可以設定代理,添加一個代理伺服器。
當然,還有其他很多工具,這裡就不一一列舉了。
Fiddle常用于爬蟲分析,安全分析,測試同學測試抓包。
這裡能不能攔截使用代理呢。當你使用了代理進行通路時,禁止通路。
1、Js,app判斷是否系統設定代理,如果設定代理,給出警告,不加載資料
優點:快,缺點:使用者修改js代碼,替換js,依然可以通路。但一般使用者操作不了。多數人都是正常通路的。
2、限制代理ip通路,建立一個代理ip庫,将市面上的代理ip存儲進去,使用者通路時,與代理ip庫對比。如果有就直接禁制。
優點,能限制大多數代理ip。缺點:額外增加查詢步驟,速度降低。
3、不限制。普通使用者一般不這樣操作,也不會,做好使用者檢驗,沒有這個使用者,你有代理ip也還是這個使用者。你換使用者,随你換好了。
當然大家還有什麼好的方式也可以在評論區讨論哦。
第六、搭建一個自己的代理伺服器
搭建代理伺服器,需要使用到一款軟體,ccproxy。
将這款軟體安裝到你的伺服器上,并啟動,通過設定,我們可以設定代理端口号。根據對應需要服務進行設定端口号。
這樣,我們的代理伺服器就搭建好了,代理ip:123.207.31.148:808然後我們來驗證我們代理是否有效。
第七、代理伺服器有效性驗證。
想要驗證我們自己搭建的代理伺服器是否有效,那我們這次直接來看,request子產品是否有效,需要做的是對比代理伺服器啟動前後的變化來判斷。
1、代理服務未啟動時
關閉代理,并請求接口,會提示代理伺服器錯誤,就說明沒有這個代理:
import requests
response=requests.get("http://123.207.31.148:8088/",proxies={"http":"123.207.31.148:808"})
print(response.text)
複制
2、代理伺服器啟動時
我們啟動代理伺服器,再來請求一下,我們可以從下面兩幅圖,以及和上面做出對比,ip也是我們設定的代理伺服器,我們的代理伺服器有效。
使用者端:
伺服器端:
3、修改代理伺服器端口
我們将原來的808端口修改為8081,再來試一下。808也就不再生效。
8081請求:
這樣,我們的代理伺服器也就說明設定是有效的。
第八、爬取代理伺服器
我們一個代理伺服器已經搞定了,相同的,當我們有幾百,上千個伺服器,都搭建了代理伺服器,那我們是不是擁有了自己的代理ip池。但我們沒那麼多錢,也沒必要。隻能去用别人的了。
代理ip池擷取,代碼如下:
import requests
from bs4 import BeautifulSoup
def proxy_ip(protocol=["http"],anonlv1=[],country=["CN"]):
"""
:param protocol: 請求方式:http,https,socks4,socks5
:param anonlv1: 級别:1,2,3,4 L1 – 透明,L2 – 匿名,L3 – 扭曲,L4 – 精英
:param country: 國家,無為全部,CN 中國
:return:ip_list,ip清單
"""
text=""
for i in protocol:
text+="protocol="+i+"&"
for i in anonlv1:
text+="anonlv1="+i+"&"
for i in country:
text+="country="+i+"&"
global headers
headers={
'Cookie': '_ga=GA1.2.1786575828.1619658683; _gid=GA1.2.555491280.1623999959; _gat=1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36'
}
response=requests.get("http://proxydb.net/?"+text,headers=headers)
Soup = BeautifulSoup(response.text, "html.parser")
table = Soup.find_all("table")[0].find_all("a")
list=[]
for i in table:
ip=i.get_text()
list.append(ip)
return list
複制
文章總結
通過本文,你可以了解到
1、requests子產品如何設定代理。
2、代理ip設定是否真有效。
3、如何搭建自己的代理伺服器。
4、代理ip池的擷取。
處于安全方面來說,因為我們請求時,資料會發送到代理伺服器,如果請求在賬号密碼是明文的情況下,代理伺服器就可以擷取到你的賬号資訊。
同理,翻牆軟體也是一種代理,隻不過他代理到國外去了。翻牆軟體也是能擷取到你的使用者資訊的哦,是以大家需要注意個人資訊安全呀。
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/111355.html原文連結:https://javaforall.cn