`
flynewton
  • 浏览: 62588 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用 python 实现一个多线程网页下载器

阅读更多

关键字: Python , 多线程

转自http://blog.csdn.net/lanphaday/archive/2009/04/16/4083852.aspx

学习之

  1. #!/usr/bin/env python  
  2. # -*- coding:utf-8 -*-    
  3. import urllib, httplib    
  4. import thread    
  5. import time    
  6. from Queue import Queue, Empty, Full    
  7. HEADERS = {"Content-type""application/x-www-form-urlencoded",    
  8.                         'Accept-Language':'zh-cn',    
  9.                         'User-Agent''Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.0)',    
  10.                         "Accept""text/plain"}    
  11. UNEXPECTED_ERROR = -1    
  12. POST = 'POST'    
  13. GET = 'GET'    
  14. def base_log(msg):    
  15.     print msg    
  16. def base_fail_op(task, status, log):    
  17.     log('fail op. task = %s, status = %d'%(str(task), status))    
  18. def get_remote_data(tasks, results, fail_op = base_fail_op, log = base_log):    
  19.     while True:    
  20.         task = tasks.get()    
  21.         try:    
  22.             tid = task['id']    
  23.             hpt = task['conn_args'# hpt <= host:port, timeout    
  24.         except KeyError, e:    
  25.             log(str(e))    
  26.             continue    
  27.         log('thread_%s doing task %d'%(thread.get_ident(), tid))    
  28.         #log('hpt = ' + str(hpt))    
  29.         conn = httplib.HTTPConnection(**hpt)    
  30.                 
  31.         try:    
  32.             params = task['params']    
  33.         except KeyError, e:    
  34.             params = {}    
  35.         params = urllib.urlencode(params)    
  36.         #log('params = ' + params)    
  37.             
  38.         try:    
  39.             method = task['method']    
  40.         except KeyError:    
  41.             method = 'GET'    
  42.         #log('method = ' + method)    
  43.             
  44.         try:    
  45.             url = task['url']    
  46.         except KeyError:    
  47.             url = '/'    
  48.         #log('url = ' + url)    
  49.             
  50.         headers = HEADERS    
  51.         try:    
  52.             tmp = task['headers']    
  53.         except KeyError, e:    
  54.             tmp = {}    
  55.         headers.update(tmp)    
  56.         #log('headers = ' + str(headers))    
  57.         headers['Content-Length'] = len(params)    
  58.             
  59.         try:    
  60.             if method == POST:    
  61.                 conn.request(method, url, params, headers)    
  62.             else:    
  63.                 conn.request(method, url + params)    
  64.             response = conn.getresponse()    
  65.         except Exception, e:    
  66.             log('request failed. method = %s, url = %s, params = %s headers = %s'%(    
  67.                         method, url, params, headers))    
  68.             log(str(e))    
  69.             fail_op(task, UNEXPECTED_ERROR, log)    
  70.             continue    
  71.                 
  72.         if response.status != httplib.OK:    
  73.             fail_op(task, response.status, log)    
  74.             continue    
  75.                 
  76.         data = response.read()    
  77.         results.put((tid, data), True)    
  78.             
  79. class HttpPool(object):    
  80.     def __init__(self, threads_count, fail_op, log):    
  81.         self._tasks = Queue()    
  82.         self._results = Queue()    
  83.             
  84.         for i in xrange(threads_count):    
  85.             thread.start_new_thread(get_remote_data,(self._tasks, self._results, fail_op, log))    
  86.                 
  87.     def add_task(self, tid, host, url, params, headers = {}, method = 'GET', timeout = Nonecolor: black; background-color: inherit; padding: 0p
    分享到:
    评论

相关推荐

    python m3u8多线程下载器

    在本项目中,我们关注的是利用Python实现的“m3u8多线程下载器”。M3U8是一种基于HTTP/HTTPS协议的流媒体格式,常用于在线视频播放,尤其在移动设备上。它将视频文件分割成多个小片段,方便流式传输。 这个下载器...

    python selenium chrome 多开 多线程

    本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...

    Python-HTTP大文件多线程下载工具支持断点续传

    总结来说,"Python-HTTP大文件多线程下载工具支持断点续传"是一个结合了HTTP通信、多线程编程和文件操作的实例,对于提升Python网络编程能力,尤其是处理大文件下载问题,具有很高的学习价值。通过深入研究和实践,...

    python实现多线程网页下载器

    本文为大家分享了python实现的一个多线程网页下载器,供大家参考,具体内容如下 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据。把它放上来也是想大家帮忙挑刺,找找 bug,让它...

    Python-Python实现多线程下载http文件并将最终代码转化为可执行文件

    下面将详细阐述如何使用Python实现多线程下载HTTP文件以及如何将Python脚本转化为可执行的.exe文件。 首先,我们需要导入必要的库,如`requests`用于发送HTTP请求,`threading`用于多线程操作,以及`os`和`sys`进行...

    Python并发技术实现:多线程、多进程(实例爬虫代码)中文PDF合集版最新版本

    另外包含Python多线程、异步+多进程爬虫实现代码详解,需要的可下载试试! 多线程对爬虫的效率提高是非凡的,当我们使用python的多线程有几点是需要我们知道的:1、Python的多线程并不如java的多线程,其差异在于当...

    python多线程池离线安装包.zip

    本离线安装包“python多线程池离线安装包.zip”包含了实现Python多线程所需的关键组件。主要包含以下三个子文件: 1. `pip-19.2.3.tar.gz`:这是Python的包管理器pip的一个版本,用于安装和管理Python库。在离线...

    Python-python实现的多线程爬虫

    通过学习这个"multithreading-spider-master"项目,你将深入理解Python多线程爬虫的原理和实践,掌握如何设计并优化一个高效的爬虫系统。在实际操作中,还需要注意遵循网络道德,合理使用爬虫技术,避免对目标网站...

    多线程爬取1000个网页_python爬虫_thread_

    Python的`threading`模块是实现多线程的基础,它允许我们在一个程序中同时执行多个任务。在Python中创建线程非常简单,只需要定义一个函数作为线程的目标,然后使用`Thread`类实例化一个线程对象,最后调用`start()`...

    Python基于多线程协程的文献下载器源码.zip

    本文件“Python基于多线程协程的文献下载器源码.zip”提供了实现这一功能的示例代码,旨在帮助开发者理解和应用这两种技术。 首先,我们来探讨多线程(Multithreading)。在Python中,多线程允许一个程序同时运行多...

    02.6.利用Python SOCKET多线程开发FTP软件(全6集)

    根据提供的文件信息,我们可以推断出本教程系列主要讲解如何使用Python中的Socket编程结合多线程技术来开发一个FTP(文件传输协议)软件。接下来,我们将深入探讨这一主题中的几个关键知识点。 ### 一、Python ...

    基于Python+PyQt制作GUI的劲爆多进程和多线程下载器

    【作品名称】:基于Python+PyQt制作GUI的劲爆多进程和多线程下载器 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...

    基于python的多线程例子,详细介绍了多线程处理

    在Python编程语言中,多线程是实现并发执行任务的重要机制。它允许程序同时执行多个不同的任务,从而提高效率和响应速度。在这个基于Python的多线程例子中,我们将深入探讨如何创建和管理线程,以及如何利用它们来...

    python实现的类IDM高速下载程序

    "Python实现的类IDM高速下载程序"是一个利用Python编程语言构建的多线程下载工具,它借鉴了Internet Download Manager (IDM) 的核心理念,即通过分段下载和多线程并行处理来显著提高下载速度,同时不受网络速度限制...

    python爬虫实战,多线程爬取京东

    本项目通过使用Python多线程技术成功实现了对京东商品列表和详情页的爬取,不仅能够有效地抓取数据,还能高效地处理大量图片的下载与存储。此项目不仅可以作为学习Python爬虫技术的良好案例,还具有一定的实用价值,...

    Python实现多线程HTTP下载器示例

    本文将介绍使用Python编写多线程HTTP下载器,并生成.exe可执行文件。 环境:windows/Linux + Python2.7.x 单线程 在介绍多线程之前首先介绍单线程。编写单线程的思路为: 1.解析url; 2.连接web服务器; 3.构造...

    Python-一个从数据库取数据进行多线程爬文件存本地的爬虫

    标题中的“Python-一个从数据库取数据进行多线程爬文件存本地的爬虫”表明这是一个使用Python编程语言实现的项目,它具有两个主要功能:从数据库获取数据以及使用多线程爬取并存储文件到本地。这个项目可能是为了...

    Python-Python3爬虫系列的理论验证比较同步依序下载多进程并发多线程并发和asyncio异步编程之间的效率差别

    为了实际验证这四种方法的性能差异,可以设计一个简单的爬虫程序,分别用这四种方式下载一定数量的网页。通过记录下载时间和比较结果,可以直观地看到不同并发模型在爬虫中的效率差异。 总结: - 对于I/O密集型任务...

    多线程下载图片.zip

    在IT领域,多线程是一种...通过以上知识点的整合和应用,我们可以构建一个智能的多线程图片下载器,不仅提高下载效率,还能实现自动翻页和下载。这个项目对于学习Python多线程编程和网络爬虫技术具有很高的实践价值。

Global site tag (gtag.js) - Google Analytics