下面小編就為大家帶來一篇python掃描proxy並取得可用代理ip的實例。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
今天咱寫一個挺實用的工具,就是掃描並取得可用的proxy
##首先呢,我先百度找了一個網站:www.xicidaili.com 作為例子這個網站裡公佈了許多的國內外可用的代理的ip和端口我們還是按照老樣子進行分析,就先把所有國內的proxy掃一遍點開國內部分進行審查發現,國內proxy和目錄為以下url:www.xicidaili.com/nn/x這個x差不多兩千多頁,那麼看來又要線程處理了。 。 。 老樣子,我們嘗試是否能直接以最簡單的requests.get()獲取內容#返回503,那麼我們加一個簡單的headers返回200,成咯好了我們先進行網頁內容分析並取得想要的內容我們發現,包含ip資訊的內容在於是我們開始嘗試寫,一下為寫想法:
處理頁面的時候,是先提取tr標籤,再將tr標籤中的td標籤提取 所以運用了兩次bs操作,並且第二次使用bs操作時需要進行str處理 因為我們獲得tr之後,我們需要其中的2, 3,6號的東西, 但是當我們用一個for循環輸出的i並不能進行組的操作 所以我們乾脆分別對每一個td的soup進行第二次操作之後直接提取2,3,6 提取之後,直接加上.string提取內容即可r = requests.get(url = url,headers = headers) soup = bs(r.content,"html.parser") data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')}) for i in data: soup = bs(str(i),'html.parser') data2 = soup.find_all(name = 'td') ip = str(data2[1].string) port = str(data2[2].string) types = str(data2[5].string).lower() proxy = {} proxy[types] = '%s:%s'%(ip,port)
url = 'http://1212.ip138.com/ic.asp' r = requests.get(url = url,proxies = proxy,timeout = 6)
返回的內容如下:
#
<html> <head> <meta xxxxxxxxxxxxxxxxxx> <title> 您的IP地址 </title> </head> <body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 来自:xxxxxxxx</center></body></html>
上碼:
#coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs import Queue import threading class proxyPick(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self._queue = queue def run(self): while not self._queue.empty(): url = self._queue.get() proxy_spider(url) def proxy_spider(url): headers = { ....... } r = requests.get(url = url,headers = headers) soup = bs(r.content,"html.parser") data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')}) for i in data: soup = bs(str(i),'html.parser') data2 = soup.find_all(name = 'td') ip = str(data2[1].string) port = str(data2[2].string) types = str(data2[5].string).lower() proxy = {} proxy[types] = '%s:%s'%(ip,port) try: proxy_check(proxy,ip) except Exception,e: print e pass def proxy_check(proxy,ip): url = 'http://1212.ip138.com/ic.asp' r = requests.get(url = url,proxies = proxy,timeout = 6) f = open('E:/url/ip_proxy.txt','a+') soup = bs(r.text,'html.parser') data = soup.find_all(name = 'center') for i in data: a = re.findall(r'\[(.*?)\]',i.string) if a[0] == ip: #print proxy f.write('%s'%proxy+'\n') print 'write down' f.close() #proxy_spider() def main(): queue = Queue.Queue() for i in range(1,2288): queue.put('http://www.xicidaili.com/nn/'+str(i)) threads = [] thread_count = 10 for i in range(thread_count): spider = proxyPick(queue) threads.append(spider) for i in threads: i.start() for i in threads: i.join() print "It's down,sir!" if __name__ == '__main__': main()
以上是python掃描proxy並且如何取得可用代理ip的範例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!