题记:写这篇博客要主是加深自己对验证采集的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

没有应用列队 ,也没有线程池 还在习学  只是多线程

#coding:utf8
import urllib2,sys,re
import threading,os
import time,datetime'''
这里没有应用列队 只是采取多线程分发 对理代量不大的网页还行 但是几百几千能性就很差了
'''def get_proxy_page(url):'''析解理代页面 取获全部理代地址''' proxy_list = []p = re.compile(r'''<div>(.+?)<span class="Apple-tab-span" style="white-space:pre">.*?</span>(.+?)<span class="Apple-tab-span" style="white-space:pre">.+?</span>(.+?)(<span.+?)?</div>''')   try:res = urllib2.urlopen(url)except urllib2.URLError:print 'url Error'sys.exit(1)pageinfo = res.read()res = p.findall(pageinfo) #掏出全部的#组合成全部理代服务器表列成一个符合规矩的listfor i in res:ip = i[0]port = i[1]addr = i[2]l = (ip,port,addr)proxy_list.append(l)return proxy_list#步同锁装饰器
lock = threading.Lock()def synchronous(f):def call(*args, **kw):lock.acquire()try:return f(*args, **kw)finally:lock.release()return call#间时计算器
def sumtime(f):def call(*args, **kw):t1 = time.time()try:return f(*args, **kw)finally:print u'共总用时 %s' % (time.time() - t1)return callproxylist = []
reslist = []#取获单个理代并理处
@synchronous
def getoneproxy():global proxylistif len(proxylist)>0:return proxylist.pop()else:return ''#添加验证胜利的理代
@synchronous
def getreslist(proxy):global reslistif not (proxy in reslist):reslist.append(proxy)def handle():timeout = 10test_url = r'http://www.baidu.com'test_str = '030173'while 1:proxy = getoneproxy()#最后一个回返是空if not proxy: return        print u"正在验证 : %s" %proxy[0]#第一步启用 cookiecookies = urllib2.HTTPCookieProcessor()proxy_server = r'http://%s:%s' %(proxy[0],proxy[1])#第二步 装载理代proxy_hander = urllib2.ProxyHandler({"http":proxy_server})            #第三步 组合requesttry:opener = urllib2.build_opener(cookies, proxy_hander)pass except urllib2.URLError:print u'url设置错误'continue #配置request opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1')]#发送请求urllib2.install_opener(opener)t1 = time.time()try:req = urllib2.urlopen(test_url,timeout=timeout)result = req.read()pos = result.find(test_str)timeused = time.time() - t1 if pos>1:#保存到表列中getreslist((proxy[0],proxy[1],proxy[2],timeused))print u'胜利采集',proxy[0],timeusedelse:   continueexcept Exception,e:print u'采集失败 %s :timeout' %proxy[0]continue         def save(reslist):path = os.getcwd()filename = path + '/Proxy-'+datetime.datetime.now().strftime(r'%Y%m%d%H%M%S')+'.txt'f = open(filename,'w+')for proxy in reslist:f.write('%s %s %s %s \r\n'%(proxy[0],proxy[1],proxy[2],proxy[3]))f.close()@sumtime
def main():url = r'http://www.free998.net/daili/httpdaili/8949.html'global proxylist,reslist#取获全部线程 proxylist = get_proxy_page(url)print u'一共取获 %s 个理代' %len(proxylist)#print proxylistprint '*'*80   #线程建创和分发务任print u'开始建创线程理处.....'threads = []proxy_num = len(proxylist)for i in range(proxy_num):th = threading.Thread(target=handle, args=())threads.append(th)for thread in threads:thread.start()for thread in threads:threading.Thread.join(thread)print u'取获有效理代 %s 个,当初开始排序和保存 '%len(reslist)    reslist = sorted(reslist,cmp=lambda x,y:cmp(x[3],y[3]))save(reslist)if __name__=='__main__':main()
每日一道理
漫漫人生路,谁都难免会遭遇各种失意或厄运。在凄风苦雨 惨雾愁云的考验面前,一个强者,是不会向命运低头的。风再冷,不会永远不息;雾再浓,不会经久不散。风息雾散,仍是阳光灿烂。

出输:

一共取获 31 个理代
********************************************************************************
开始建创线程理处.....
正在验证 : 122.10.48.13
正在验证 : 122.72.76.121
正在验证 : 122.72.11.129
正在验证 : 222.89.159.131
正在验证 : 218.5.74.174
正在验证 : 218.203.107.165
正在验证 : 219.224.101.81
正在验证 : 221.176.169.14
正在验证 : 112.5.254.85
正在验证 : 113.106.73.210
正在验证 : 114.247.21.212
正在验证 : 122.72.76.122
正在验证 : 219.239.26.23
正在验证 : 222.89.154.14
正在验证 : 58.67.147.197
正在验证 : 222.188.88.26
正在验证 : 103.247.16.241
正在验证 : 183.221.250.141
正在验证 : 183.221.250.137
正在验证 : 122.72.80.108
正在验证 : 122.72.76.125
正在验证 : 122.72.11.131
正在验证 : 122.72.80.101
正在验证 : 122.72.120.41
正在验证 : 122.72.120.38
正在验证 : 122.72.120.35
正在验证 : 218.203.105.26
正在验证 : 221.130.18.211
正在验证 : 110.77.236.48
正在验证 : 218.91.206.146
正在验证 : 211.162.16.210
胜利采集 114.247.21.212 0.300999879837
胜利采集 218.203.105.26 0.306999921799
胜利采集 221.176.169.14 0.417000055313
胜利采集 122.72.120.35 0.369999885559
采集失败 218.5.74.174 :timeout
胜利采集 122.72.120.38 0.40900015831
胜利采集 183.221.250.137 0.608999967575
胜利采集 122.72.11.131 0.679999828339
胜利采集 183.221.250.141 0.791000127792
胜利采集 113.106.73.210 0.891000032425
胜利采集 122.72.76.121 1.40299987793
胜利采集 122.72.80.108 1.4470000267
胜利采集 211.162.16.210 1.625
胜利采集 122.72.76.125 1.6819999218
胜利采集 112.5.254.85 1.74399995804
胜利采集 122.72.80.101 1.79799985886
胜利采集 122.72.11.129 2.00900006294
胜利采集 122.72.120.41 1.99099993706
采集失败 222.188.88.26 :timeout
胜利采集 122.72.76.122 3.49100017548
胜利采集 218.91.206.146 3.66000008583
胜利采集 122.10.48.13 3.91799998283
胜利采集 222.89.154.14 3.93499994278
胜利采集 222.89.159.131 3.99699997902
胜利采集 221.130.18.211 3.99500012398
采集失败 219.224.101.81 :timeout采集失败 218.203.107.165 :timeout

采集失败 58.67.147.197 :timeout
采集失败 103.247.16.241 :timeout
采集失败 110.77.236.48 :timeout
胜利采集 219.239.26.23 12.2809998989
取获有效理代 24 个,当初开始排序和保存 
共总用时 13.2810001373

文章结束给大家分享下程序员的一些笑话语录:  一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/03/3057392.html

验证采集[Python]代理抓取并验证-多线程相关推荐

  1. 转一个python写的多线程 代理服务器 抓取,保存,验证程序

    用php写过一个,不过由于 php 不支持多线程,抓取和验证速度都非常的慢 (尽管libcurl可以实现多线程抓取,但他也只限于抓取网页这个功能,抓回来的数据进行再处理很麻烦). 于是决定用pytho ...

  2. python通过代理访问网页_Python使用PyCurl通过SOCK5代理抓取网页 - Python - 服务器之家...

    Python使用PyCurl通过SOCK5代理抓取网页 发布时间:2013-10-09

  3. python—简单数据抓取三(简单IP地址代理、利用蘑菇代理实现IP地址代理刷新本地ip地址、利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程)

    学习目标: python学习二十三 -数据抓取三. 学习内容: 1.简单IP地址代理 2.利用蘑菇代理实现IP地址代理刷新本地ip地址 3.利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程 1. ...

  4. Python学习教程:Python爬虫抓取技术的门道

    Python学习教程:Python爬虫抓取技术的门道 web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展.然而,正所谓成也萧何败也萧何,开放的特性.搜索引擎以及简单 ...

  5. 利用 Python 自动抓取微博热搜,并定时发送至邮箱

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来. ...

  6. python爬虫抓取网站技巧总结

    不知道为啥要说是黑幕了??哈哈哈-..以后再理解吧 python爬虫抓取网站的一些总结技巧 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛 ...

  7. python wechatsougou_python抓取搜狗微信公众号文章

    初学python,抓取搜狗微信公众号文章存入mysql mysql表: 代码: import requests import json import re import pymysql # 创建连接 ...

  8. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  9. 最好用的Python网页抓取工具包!

    众所周知,Python是最流行的编程语言之一,因为它简单.强大,也使它越来越流行,大家可以免费构建软件.开发Web服务.执行数据分析和可视化等等,那么在Python语言中常用的工具有哪些呢?以下是详细 ...

最新文章

  1. mysql存储过程的返回值在哪里设置_MySQL存储过程的返回值
  2. 硬件知识:串口通讯的起始、数据、停止位是怎么分配的?
  3. 美国计算机工程专业,美国计算机工程专业哪些学校比较好
  4. ecshop pages.lbi.php,关于Ecshop pages.lbi.php Xss漏洞的修复
  5. 二维前缀和(附模板题)
  6. YOLOX: Exceeding YOLO Series in 2021 --- Study Notes
  7. 环境变量 - Maven
  8. 3.1 语音的产生与感知
  9. python安装scrapy教程_Python实用工具包Scrapy安装教程
  10. 【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改)
  11. 等保三级核心-物理安全
  12. 大行bya412和java513_真实解密大行bya412和k3区别在哪里?哪款最好?老司机透漏评测...
  13. java计算机毕业设计红色主题旅游网站源码+mysql数据库+系统+lw文档+部署
  14. 三天打鱼两天晒网问题
  15. 误差棒是什么?误差柱状图如何做?
  16. 微服务下权限校验方案
  17. adobe illustrator如何裁剪图像
  18. 一键锁屏源代码c语言,Android一键锁屏开发全过程【源码】【附图】
  19. Python 算法训练之摩斯电码
  20. HTML5span中加入超链接,HTML中文本标签,超链接标签以及图像标签的简单介绍

热门文章

  1. docker学习笔记18:Dockerfile 指令 VOLUME 介绍
  2. SharePoint 2013 图文开发系列之自定义字段
  3. 虚拟化技术--桌面虚拟化(VDI)
  4. 【转合辑】squid的安装配置
  5. 语言孪生素数问题_刘建亚教授讲述“素数的故事”
  6. 谈论源码_为什么每个人都在谈论WebAssembly
  7. scrum项目协作是什么_什么是小型Scrum?
  8. 什么是kubernetes_Kubernetes为什么如此受欢迎?
  9. CSS 背景尺寸 background-size属性
  10. es6 async函数的异步迭代器