zoukankan      html  css  js  c++  java
  • 《爬虫》爬取可用的免费IP

    import telnetlib
    import urllib.request
    from bs4 import BeautifulSoup
    
    for d in range(1, 3):  # 采集1到2页
    	scrapeUrl = 'http://www.xicidaili.com/nn/%d/' % d
    	req = urllib.request.Request(scrapeUrl)
    	req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
    	response = urllib.request.urlopen(req)
    	html = response.read()
    
    	bsObj = BeautifulSoup(html, "html.parser")
    
    	for i in range(100):
    		speed = float(bsObj.select('td')[6 + i * 10].div.get('title').replace('秒', ''))
    		if speed < 0.2:  # 验证速度,只要速度在0.2秒之内的
    			ip = bsObj.select('td')[1 + i * 10].get_text()
    			port = bsObj.select('td')[2 + i * 10].get_text()
    			ip_address = 'http://' + ip + ':' + port
    			try:
    				telnetlib.Telnet(ip, port=port, timeout=2)  # 用telnet对ip进行验证
    			except:
    				print('fail')
    			else:
    				print('sucess:' + ip_address)
    				f = open('proxy_list.txt', 'a')
    				f.write(ip_address + '
    ')
    				f.close()
    

     

    版本二:

    import threading
    import time
    import json
    
    import telnetlib
    
    
    class TestProxy(object):
    	def __init__(self):
    		today = time.strftime('%Y%m%d', time.localtime())
    		self.filename = today + '.txt'
    		self.sFile = self.filename
    		self.dFile = r'alive.txt'
    		self.URL = r'http://www.baidu.com'
    		self.threads = 10
    		self.timeout = 3
    		self.aliveList = []
    
    		self.run()
    
    	def run(self):
    		with open(self.sFile, 'r',encoding='utf-8') as f:
    			lines = f.readlines()
    			line = lines.pop()
    			line = json.loads(line)
    			while lines:
    				for i in range(self.threads):
    					t = threading.Thread(target=self.linkWithProxy, args=(line,))
    					t.start()
    					if lines:
    						line = lines.pop()
    					else:
    						continue
    			with open(self.dFile, 'w') as f:
    				for i in range(len(self.aliveList)):
    					f.write(self.aliveList[i] + '
    ')
    
    	def linkWithProxy(self, line):
    		line = json.loads(line)
    		protocol = line['protocol'].lower()
    		ip = line['ip']
    		port = line['port']
    		server = protocol + '://' + line['ip'] + ':' + line['port']
    		print(server)
    		try:
    			response = telnetlib.Telnet(ip, port=port, timeout=self.timeout)
    		except:
    			print('%s 链接失败' % server)
    			return
    		else:
    			print('%s 链接成功!' % server)
    			self.aliveList.append(server)
    		print(self.aliveList)
    
    
    if __name__ == '__main__':
    	TP = TestProxy()
    

      

     

  • 相关阅读:
    坑爹啊 StringDictionary 居然是不区分大小写的
    .NET平台OLEDB类型映射到Access数据类型 (转)
    国内省选乱做
    计算几何做题记录
    P6634 [ZJOI2020] 密码 解题报告
    AT2704 [AGC019E] Shuffle and Swap 解题报告
    ARC110F Esoswap 解题报告
    P6631 [ZJOI2020] 序列 解题报告
    P6633 [ZJOI2020] 抽卡 解题报告
    CF1605F PalindORme 解题报告
  • 原文地址:https://www.cnblogs.com/shuimohei/p/12660070.html
Copyright © 2011-2022 走看看