在我們使用python爬蟲擷取所需資源時,如果被發現違規行為,有可能會被對方伺服器禁止本地ip通路,是以擷取代理ip與端口進行通路可以預防部分危險,但是一個一個搜尋查找代理ip與端口,程式效率太低,是以使用程式擷取代理ip與端口是一個好選擇。
1 import urllib.request
2 import re
3
4 # 正則比對規則
5 regip = "<td>((?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9])))</td>"
6 regport = "<td>(\d{2}|\d{3}|\d{4}|\d{5})</td>"
7
8 # 僞裝浏覽器頭資訊
9 header = ("User-Agent", 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0')
10 opener = urllib.request.build_opener()
11 opener.addheaders = [header]
12 urllib.request.install_opener(opener)
13
14
15 # 從https://www.xicidaili.com/wn網站擷取代理ip
16 def get_ip(m=0, i=1):
17 url = "https://www.xicidaili.com/wn/"+str(i)
18 data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
19 ListIp = re.compile(regip).findall(data)
20 return ListIp[m]
21
22
23 # 從https://www.xicidaili.com/wn網站擷取代理端口
24 def get_port(m=0, i=1):
25 url = "https://www.xicidaili.com/wn/"+str(i)
26 data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")
27 ListPort = re.compile(regport).findall(data)
28 return ListPort[m]
值得一提的是,其中的m值為網站的頁碼數,i表示第幾條資料,使用時盡量使ip與port的i值相同。
由于https://www.xicidaili.com/wn/網頁的布局,是以i盡量不要超過100.當然,參數i和m也不能出現負數。
具體怎麼導入,怎麼使用,相信不需要我多說了,都是基礎中的基礎。
轉載于:https://www.cnblogs.com/YLTzxzy/p/11202822.html