1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2017-08-30 20:38:23 4 # @Author : EnderZhou (zptxwd@gmail.com) 5 # @Link : http://www.cnblogs.com/enderzhou/ 6 # @Version : $Id$ 7 8 import requests 9 import re 10 11 def open_url(url): 12 req = requests.get(url=url,headers=headers) 13 html = req.content 14 return html 15 16 17 def get_ipandport(html): 18 #默認網頁內的IP地址位於端口號之前,並且中間至少隔了一個非數字的字符串 19 # (?:((?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])) 用於匹配IP地址 20 # (6[0-5]{2}[0-3][0-5]|[1-5]\d{4}|[1-9]\d{1,3}|[0-9]) 用於匹配端口號 注意端口號匹配規則應從大到校排序 21 # 使用 ([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5]) 替換即可觀察到原因。 22 # 使用\D+?匹配IP地址與端口號中間至少隔了一個非數字的字符串 23 p = r'(?:((?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5]))\D+?(6[0-5]{2}[0-3][0-5]|[1-5]\d{4}|[1-9]\d{1,3}|[0-9]))' 24 iplist = re.findall(p,html) 25 for each in iplist: 26 print(each) 27 28 if __name__ == '__main__': 29 url = 'http://www.66ip.cn/' 30 headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'} 31 get_ipandport(open_url(url))
本文所編寫的使用正則對IP地址及端口爬取函數后續將與之前的網頁代理服務器驗證代碼函數整合使用
