您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用python怎么在單例模式中獲取IP代理,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
代理是什么
作為一個程序員我覺得有必要了解一些基本的網絡知識,比如說網絡代理。
我不想從哪里復制粘貼一段介紹過來,因為我覺得那樣很low,我說說我理解的網絡代理。
如果你不了解代理,你應該知道代購吧,比如你想買一個東西,卻不想自己跑去買,可以找一個代理幫你去買。類似的,網絡代理也是在你和目的網絡之間的一個中轉方。類似如下圖
Alice->agency(代理): I want to get sth from Bob
agency(代理)->Bob: give me sth
Note right of Bob: Bob thinks
Bob-->agency(代理): there is sth!
agency(代理)-->Alice: bob give you sth
這里有一個問題是,普通代理是比較好檢測出來的,有些網站不允許使用代理訪問。這時候可以使用高匿代理可以解決這個問題。關于代理不多說了,有興趣的可以自己去了解。
從哪里獲取代理
這問題就簡單了,直接百度搜索網絡代理可以搜索到很多免費的,免費的一般不太穩定,應付日常需求應該沒問題。如果需要穩定代理還是老老實實的花錢買付費的好一些,不要因小失大。
比如網上就經常推薦的代理
西祠代理:http://www.xicidaili.com/nn/
本文用的快代理:https://www.kuaidaili.com/
西祠我一開始也用了,后來因為頻繁訪問被禁用過一次,幾天后才解禁,在這期間我換成了快代理并去重寫了規則每小時獲取一次代理。
代碼
本文用的python版本為3.6.5, 如果使用2.7版本的代碼需要微調
User-Agent
用來模擬不同的瀏覽器,直接復制就可以了,我的文件名為user_agents.py
#!/usr/bin/python # -*- coding:utf-8 -*- ''' Created on 2018-04-27 @author: Vinter_he ''' user_agents = [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'Opera/9.25 (Windows NT 5.1; U; en)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)', 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12', 'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9' "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ] 獲取代理代碼 #!/usr/bin/python # -*- coding:utf-8 -*- '''
獲取快代理ip 獲取到的為https://...格式
''' from lxml import etree import sys ,user_agents ,random ,requests ,time class geKuaidailiIp: __instance = None #使用單例模式 def __new__(cls): if cls.__instance == None: cls.__instance = object.__new__(cls) cls.init(cls) return cls.__instance def init(self): print('初始化') self.proxieList = [] self.lastTime = time.time() - 3601 self.agencyUrl = 'https://www.kuaidaili.com/free/' self.userAgents = user_agents.user_agents # 獲取user-agent def getUserAgent(self): userAgent = random.choice(self.userAgents) return { 'User-Agent': userAgent } def getHtml(self,url): response = requests.get(url = url ,headers = self.getUserAgent(),timeout = 10).text # sys.exit() html = etree.HTML(response) return html #取一頁的分析代理ip def parseHtmlToGetIpList(self,url): #獲取代理ip地址 只取前五頁 html = self.getHtml(url) ip = html.xpath('//tr/td[@data-title = "IP"]') port = html.xpath('//tr/td[@data-title = "PORT"]') type = html.xpath('//tr/td[@data-title = "類型"]') return type, ip, port # 取五頁數據并進行拼接成一個list def getProxies(self): # 1小時獲取一次代理 否則會被禁 if time.time() - self.lastTime > 60*60: self.proxieList =[] self.lastTime = time.time() #只取前五頁,因為后面的失效的會比較多,看自己需要 for i in range(5): url = self.agencyUrl+'inha/'+str(i+1)+"/" type,ip,port = self.parseHtmlToGetIpList(url) count = len(port) for i in range(count): self.proxieList.append(type[i].text+"://"+ip[i].text+":"+port[i].text) time.sleep(1) print('獲取代理') return self.proxieList def getRandomAgencyIp(self): self.getProxies() ip = random.choice(self.proxieList) return ip #初始化代理 用來進行測試用 # agency = geKuaidailiIp() # while True: # # print(agency.getRandomAgencyIp()) # time.sleep(random.randint(4,10))
Python主要應用于:1、Web開發;2、數據科學研究;3、網絡爬蟲;4、嵌入式應用開發;5、游戲開發;6、桌面應用開發。
關于使用python怎么在單例模式中獲取IP代理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。