python + pycurl + 高效批量get请求

pycurl包是用C编写的libcurl  python接口,速度高于urllib。Libcurl 是一个支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP的客户端URL传输库.libcurl也支持HTTPS认证,HTTP POST,HTTP PUT,FTP上传,代理,Cookies,基本身份验证,FTP文件断点继传,HTTP代理通道等等。

def doBatchGet(url_list):

"""批量get请求,
返回成功的请求list和失败的请求list
"""

  mgr = pycurl.CurlMulti()
  handles = []
  for url in url_list:
    c = pycurl.Curl()
    c.url = url
    c.body = StringIO.StringIO()
    c.http_code = 1
    c.setopt(c.URL, c.url)
    c.setopt(c.WRITEFUNCTION, c.body.write)
    mgr.add_handle(c)
    handles.append(c)

  handle_num = len(handles)
  while handle_num:
    while 1:
      ret, handle_num = mgr.socket_all()
      if ret != pycurl.E_CALL_MULTI_PERFORM:
        break
    mgr.select(0.1)

  err_list, succ_list = [], []
  for c in handles:
    c.http_code = c.getinfo(c.HTTP_CODE)
    if c.http_code != 200:
      print ‘get error: %s, %s‘ % (c.url, c.http_code)
      err_list.append(c.url)
    else:
      res = c.body.getvalue()
      if res: #添加成功条件
        succ_list.append((c.url, res))
      else:
        err_list.append(c.url)

  for c in handles:
    mgr.remove_handle(c)
    c.body.close()
    c.close()

  mgr.close()
  return err_list, succ_list

python + pycurl + 高效批量get请求

时间: 2024-12-17 12:58:57

python + pycurl + 高效批量get请求的相关文章

Python pycurl模块 学习

pycurl模块的安装方法如下: easy_install pycurl #easy_install安装方法 pip install pycurl #pip安装方法 #源码安装方法 # 要求curl-config包支持,需要源码方式重新安装curl # wget http://curl.haxx.se/download/curl-7.36.0.tar.gz # tar -zxvf curl-7.36.0.tar.gz # cd curl-7.36.0 # ./configure # make &

python Pycurl 库 —— 实现对网站抓包分析

经常使用基调网络的同学,可能对基调网络对页面元素的性能展示感觉很好.它可以做到对一条URL做详细的检测,包括:阻塞时间.DNS解析时间.建立连接时间.SSL握手时间.发出请求时间.首包时间等. 其实,我们也可以做到.比如Python pycurl 库就可以做到对数据的收集,然后可以对收集的数据写入redis或者Mysql.最后前端使用echars通过图形的形式进行展示出来. echars是百度一个开源项目,功能很强大(项目URL:http://echarts.baidu.com)可以将数据通过各

Python使用grequests并发发送请求

目录 前言 grequests简单使用 grequests和requests性能对比 异常处理 前言 requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快.但是requests发送请求是串行的,即阻塞的.发送完一条请求才能发送另一条请求. 为了提升测试效率,一般我们需要并行发送请求.这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦. grequests是K神基于gevent+requests编写的一个并发发送请求的库,

python实现主机批量管理

在日常的运维工作中批量对主机的是很常见的,市面上也有许多主机批量管理的软件,但有时候这些软件并不能完全的满足我们的需求.python中刚好提供了关于主机批量管理的模块,今天就让我们来看看如何利用python实现主机批量管理 python提供主机批量管理的模块主要有三个paramiko.fabric与pexpect,今天我们主要说的是paramiko模块,paramiko模块是第三方模块 安装:pip install paramiko或者yum install python-paramiko如果都

python 发送post和get请求

摘自:http://blog.163.com/[email protected]/blog/static/132229655201231085444250/ 测试用CGI,名字为test.py,放在apache的cgi-bin目录下:#!/usr/bin/pythonimport cgidef main():     print "Content-type: text/html\n"    form = cgi.FieldStorage()    if form.has_key(&qu

Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记

?                                 Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记? 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量下载,学习过程中遇到了诸多情况,cnki也真是专业,不得不佩服cnki的强大. 下面进入正题: 学习.实验环境:ubuntu 14.04 工具:Eclipse ,  FireFox, FireBug,HttpFox 编程语言:pyth

python pycurl属性

pycurl.Curl() #创建一个pycurl对象的方法 pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL pycurl.Curl().setopt(pycurl.MAXREDIRS, 5) #设置最大重定向次数 pycurl.Curl().setopt(pycurl.CONNECTTIMEOUT, 60) pycurl.Curl().setopt(pycurl.TIMEOUT, 300) #连接超时设置 pycurl.

Python pycurl使用

pycurl的学习 (2013-09-26 10:40:31) 转载▼   分类: python pycurl的使用 pycurl是curl的一个python版本. pycurl的使用说明: pycurl的使用主要是一些参数的设定. 1,c.setopt(pycurl.URL,myurl) 设定链接的地址 2,c.setopt(pycurl.HTTPHEADER,['Content-Type: application/json','Content-Length: '+str(len(remove

Python实例31[批量对目录下文件重命名]

经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Unix Geeks[www.TopSage.com].mobi修改后:Mac OS X for Unix Geeks.mobi python代码如下 import osimport re def rename_dir(dir,regex,f):  if not os.path.isdir(dir) or