プロキシIPを登ります

urllib.requestインポート
BS4輸入BeautifulSoupから
インポート再
インポート時の
インポートランダム


#--------------------公用方法------------- ----------------
クラスCommanCalss:
デフ__init __(自己):
self.header = {
'ユーザーエージェント':「のMozilla / 5.0(Windows NTの6.1; WOW64)のAppleWebKit / 537.36 (KHTML、ヤモリ等)クローム/ 50.0.2661.94サファリ/ 537.36' }
self.testurl = "www.baidu.com"

デフのGetResponse(自己、URL):
REQ = urllib.request.Request(URL、ヘッダー= self.header )
RESP = urllib.request.urlopen(REQ、タイムアウト= 5)
コンテンツ= resp.read()
の戻りコンテンツ

デフ_is_alive(セルフ、代理):
試してみてください。
RESP = 0
:Iの範囲内の(3)のための
proxy_support = urllib.request.ProxyHandler({ "HTTP":プロキシ})
オープナー= urllib.request.build_opener(proxy_support)
urllib.request.install_opener(オープナー)
REQ = urllib.request .Request(self.url、ヘッダ= self.header)
访问の
:#トライ
RESP = urllib.request.urlopen(REQ、タイムアウト= 5)
電子などの例外を除いて#:
パス

RESPの== 200があれば:
Trueを返し
除い:
Falseを返す


#を-----------代理池-----------------------
クラスProxyPool:
デフ__init __(自己、proxy_finder):
self.pool = []
self.proxy_finder = proxy_finder
self.cominstan = CommanCalss()

DEF get_proxies(自己):
self.pool = self.proxy_finder.find()
self.poolにおけるpの# :
#self.cominstan._is_alive(p)の場合:
#は引き続き
他の#:
#1 self.pool.remove(p)を

DEF(自己)get_one_proxy:
リターンrandom.choice(self.pool)

writeToTxtデフ(自己、FILE_PATH):
してみてください:
FP =オープン(FILE_PATH、 "W +")
self.pool内のアイテムの:
fp.write(STR(項目)+ "\ n")
fp.close()
例外IOErrorを除く:
印刷( "ファイルを開くことができない")


#----------------------获取代理方法------- --------------
#定义一个基类
クラスIProxyFinder:
デフ__init __(自己):
self.pool = []

defを見つける(自己):
戻り


#西祠代理爬取
クラスXiciProxyFinder(IProxyFinder ):
デフ__init __(自己、URL):
スーパー(XiciProxyFinder、自己).__のinit __()
self.url = URL
self.cominstan = CommanCalss()

デフ(自己)を見つける:
:私の範囲内(1、30)のための
コンテンツ= self.cominstan.getresponse(self.url + STR(i))を
スープ= BeautifulSoup(コンテンツ、 'lxmlの')
IPS = soup.findAll( 'TR')
範囲のX(2、LEN(IPS))のために:
IP = IPS [X]
TDS = ip.findAll( "TD")
TDSは== []場合:
続ける
= TDS ip_temp [1] .contents [0] + ":" + TDS [2] .contents [0]
self.pool.append(ip_temp)
time.sleep(1)
リターンself.poolの


#--------- ------------测试--------------------------------
場合__name__ == ' __main__ ':
ファインダ= XiciProxyFinder( "http://www.xicidaili.com/wn/")
ppool_instance = ProxyPool(ファインダー)
ppool_instance.get_proxies()
ppool_instance.writeToTxt( "daili.txt")

おすすめ

転載: www.cnblogs.com/zhangshuntao123/p/11626719.html