Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例

七月
七月
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍利用Python3.4从HTTP代理网站批量抓取代理IP并进行有效性筛选的方法。通过多线程并发测试目标网站连接速度与响应内容,快速剔除无效代理,提取可用IP列表,解决爬虫IP被封问题。

本文详细介绍一种基于Python3.4的技术方案,旨在从HTTP代理网站批量抓取代理IP,并对其进行有效性筛选。以下内容可供读者参考与学习。

在进行爬虫开发时,若不配置代理,默认IP往往在几分钟内就会被目标网站封锁,因此必须寻找替代代理。起初以为只要找到HTTP代理即可解决问题,但实际从代理网站获取的IP中,大部分无法使用,仅有少数有效。为此,只能从多个代理网站大量获取代理IP,随后进行二次筛选,提取出真正可用的代理IP供后续使用。

筛选的核心逻辑如下:通过main函数获取未经筛选的原始代理列表rawProxyList,随后利用这些代理尝试连接目标网站(本文以连接手机新浪网为例)。若在指定时间内连接成功,则判定该代理为有效,并将其加入checkedProxyList列表中。

__author__ = 'multiangle'
__edition__='python3.4'
import threading
import urllib.request as request
import time
rawProxyList=[]
checkedProxyList=[]
class proxycheck(threading.Thread):
 def __init__(self,proxy_list):
  threading.Thread.__init__(self)
  self.proxy_list=proxy_list
  self.timeout=3
  self.testurl='http://www.sina.cn/'
  self.testStr='手机新浪网'
 def checkproxy(self):
  cookies=request.HTTPCookieProcessor()
  for proxy in self.proxy_list:
   handler=request.ProxyHandler({'http':'http://%s'%(proxy)})
   opener=request.build_opener(cookies,handler)
   t1=time.time()
   try:
    req=opener.open(self.testurl,timeout=self.timeout)
    res=req.read()
    res=str(res,encoding='utf8')
    usetime=time.time()-t1
    if self.testStr in res:
     checkedProxyList.append((proxy,usetime))
   except Exception as e :
    print(e)
 def run(self):
  self.checkproxy()
if __name__=='__main__':
 num=20
 thread_num=10
 checkThrends=[]
 url='YOUR PROXY URL' #提取代理的网站。
 req=request.urlopen(url).read()
 req=str(req,encoding='utf-8')
 list=req.split('\r\n') #网站返回的是字符串格式,用'\r\n'进行分割
 rawProxyList=list
 print('get raw proxy')
 for i in rawProxyList:
  print(i)
 # s=proxycheck_test(rawProxyList)
 batch_size=int((len(rawProxyList)+thread_num-1)/thread_num)
 print(batch_size)
 for i in range(thread_num):
  t=proxycheck(rawProxyList[batch_size*i:batch_size*(i+1)])
  checkThrends.append(t)
 for i in range(checkThrends.__len__()):
  checkThrends[i].start()
 for i in range(checkThrends.__len__()):
  checkThrends[i].join()
 print(checkedProxyList.__len__(),' useful proxy is find')
 for i in checkedProxyList:
  print(i)

如需了解更多Python相关知识,可参考本站相关专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。

希望本文所述内容能对读者的Python程序设计工作提供实际帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表