原文地址 http://www.cnblogs.com/lexus/archive/2012/04/08/2437336.html

Pycurl的简单使用与对比 十二月 5th, 2010

标签: python,pycurl

在几次莫名其妙的退出之后,我终于有点放弃urllib2,开始尝试其他的模块。看到很多人推荐wget和pycurl。wget是独立软件,所以就没考虑。pycurl的话,得益于基于c语言开发的curl性能强劲,使得普遍反映它效率快、稳定性高、功能强大。于是决定尝试之,简单测试了下(见后面),如果用平均值来比较的话,pycur所消耗的时间远小于urllib2。这对于爬虫来讲,累积之后变化就非常可观了。

PycURL 是一个非常快速(参考多并发操作)和丰富完整特性的,但是有点复杂的接口。如果你需要些简单或纯 Python 的模块,你可以参考一下  urllib2 或 urlgrabber 。通过 http://pycurl.sourceforge.net/ 了解 PycURL 的文档信息及其其他信息。因为 PycURL 是对 libcurl 的一个封装,使用时还需要参考 libcurl 的文档(针对 C 的)。

pycurl的安装

获取和安装libcurl非常简单,取决于您所运行的Linux版本,如果你也使用ubuntu,那只需要使用ap-get就可以轻松安装。

$ sudo apt-get  libcurl3

$ sudo apt-get  python-pycurl

如果想查看下系统内pycurl版本信息可以:

1 >>> import pycurl

2 >>> pycurl.version

3 'libcurl/7.19.7 GnuTLS/2.8.5 zlib/1.2.3.3 libidn/1.15'

如上所示,我的系统里的libcurl是7.19.7的最新版本。

pycurl的使用:

pycurl.Curl() -> Curl object

这个函数创建一个同 libcurl中的CURL处理器相对应的Curl对象.Curl对象自动的设置CURLOPT_VERBOSE为0, CURLOPT_NOPROGRESS为1,提供一个默认的CURLOPT_USERAGENT和设置CURLOPT_ERRORBUFFER指向一个私 有的错误缓冲区.

pycurl.CurlMulti() -> CurlMulti object

这个函数创建一个新的与libcurl中的CURLM处理器相 对应的CurlMulti对象.

pycurl.CurlShare() -> CurlShare object

这个函数创建一个新的与libcurl中的CURLSH处理器 相对应的CurlShare对象.CurlShare对 象可以在Curl对象上传递SHARE选项参数. [待续]

其中:

Curl对象具有以下方法:

close() -> None 对应的是 libcurl中的curl_easy_cleanup方法.当Curl对象不再被引用时pycurl会自动调用这个方法,但也可直接地调用这个方法.

perform() -> None 对应于libcurl中的curl_easy_perform方法.

setopt(option, value) -> None 对应于libcurl中的curl_easy_setopt方法, option使用libcurl中的CURLOPT_*常量来指定,只可惜CURLOPT_前缀现在已经被去掉了.value的数据类型依赖于 option,它可以是一个字符串,整型,长整型,文件对象,列表或是函数.

Example usage:

import pycurl

c = pycurl.Curl()

c.setopt(pycurl.URL, "http://www.python.org/")

c.setopt(pycurl.HTTPHEADER, ["Accept:"])

import StringIO

b = StringIO.StringIO()

c.setopt(pycurl.WRITEFUNCTION, b.write)

c.setopt(pycurl.FOLLOWLOCATION, 1)

c.setopt(pycurl.MAXREDIRS, 5)

c.perform()

print b.getvalue()

getinfo(option) -> Result 对应于 libcurl中的curl_easy_getinfo方法, option同样使用libcurl中的CURLOPT_*常量来指定,只可惜CURLOPT_前缀现在已经被去掉了. Result包含一个整数,浮点数或字符串,这都信赖于给定的option.getinfo方法不能在perform方法未调用或完成之前进行调用.

Example usage:

import pycurl

c = pycurl.Curl()

c.setopt(pycurl.URL, "http://sf.net")

c.setopt(pycurl.FOLLOWLOCATION, 1)

c.perform()

print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL)

...

--> 200 "http://sourceforge.net/"

errstr() -> String 返回这个处理器中内部libcurl错误缓冲区的字符串表示.

其他的就以后再翻译吧。

urilib2 VS pycurl的一个简单对比

编码如下,就是取一批url,然后分别用urllib2和pycurl的方法来获取页面内容,计算它们各自所消耗的时间。最后比较平均时间。

我这跑了一下,相关的数据如下,大概pycurl能比urllib2减少20%以上的消耗时间。

1:  urllib2 平均时间:0.379438, pycurl平均时间:0.279213

2:  urllib2 平均时间:0.568966, pycurl平均时间:0.395201

3:  urllib2 平均时间:0.606843, pycurl平均时间:0.459965

4:  urllib2 平均时间:0.381241, pycurl平均时间:0.239673

5:  urllib2 平均时间:0.503715, pycurl平均时间:0.543600

6:  urllib2 平均时间:0.291307, pycurl平均时间:0.188492

7:  urllib2 平均时间:0.449666, pycurl平均时间:0.299233

相关代码如下:

1:  #coding=utf-8

2:  import os

3:  import datetime as dt

4:  import time

5:  import urllib2

6:  import pycurl

7:  import cStringIO as StringIO

8:

9:  '''测试用程序,用于比较pycurl和urllib2效率

10:     一只橘子 2010.12.05

11:  '''

12:

13:  def fetch_url(menuurl = ""):

14:      '''从url获取目录页内容;返回返回页面内容字符串

15:         使用urllib2来实现

16:      '''

17:      the_page = ""

18:      try:

19:          #下载页面

20:          req = urllib2.Request(menuurl)

21:          req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12')

22:          #设置超时

23:          response = urllib2.urlopen(req, timeout = 30)

24:          the_page = response.read()

25:      except Exception, e:

26:          crawlerlog("+++++++++fetch_url():Error4: %s;  menuurl: %s" % (e, menuurl))

27:      return the_page

28:

29:  def fetch_url2(menuurl = ""):

30:      '''从url获取目录页内容;返回返回页面内容字符串

31:         使用pycurl来实现

32:      '''

33:      the_page = ""

34:      try:

35:          #下载页面

36:          req = pycurl.Curl()

37:          req.setopt(pycurl.URL, menuurl)

38:          # 设置超时

39:          req.setopt(pycurl.TIMEOUT, 30)

40:          fp = StringIO.StringIO()

41:          req.setopt(pycurl.WRITEFUNCTION, fp.write)

42:          req.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12')

43:          req.perform()

44:          the_page = fp.getvalue()

45:      except Exception, e:

46:          crawlerlog("+++++++++fetch_url():Error555: %s;  menuurl: %s" % (e, menuurl))

47:      return the_page

48:

49:  def crawlerlog(doc):

50:      '''保存日志

51:      '''

52:      logfile = u"./crawler_error.log"

53:      try:

54:          out = open(logfile, "a")

55:          out.write("    Time: %s  %s  \n" % (dt.datetime.now(), doc))

56:      except Exception,e:

57:          print "  Error: %s" % e

58:      finally:

59:          out.close()

60:

61:  def url_vs_curl():

62:      print "开始:",dt.datetime.now()

63:      import timeit

64:      link = ['http://www.baidu.com/', 'http://www.sina.com.cn', 'http://www.qq.com', 'http://www.sohu.com', 'http://www.163.com/', 'http://www.ifeng.com/', 'http://www.cctv.com/default.shtml', 'http://www.xinhuanet.com/', 'http://www.people.com.cn/', 'http://cn.msn.com/', 'http://www.google.cn/', 'http://cn.yahoo.com/', 'http://www.amazon.cn/?source=2009hao123famousdaohang', 'http://www.chinamobile.com/', 'http://www.pconline.com.cn/', 'http://www.chinahr.com/', 'http://www.gov.cn/', 'http://www.zhcw.com/', 'http://www.autohome.com.cn/', 'http://www.zhaopin.com/Market/hao123.jsp', 'http://fund.eastmoney.com/', 'http://www.eastmoney.com/', 'http://www.xiaonei.com/', 'http://www.soufun.com/', 'http://www.51.com/', 'http://www.rayli.com.cn/', 'http://youa.baidu.com/', 'http://www.360.cn/', 'http://www.ctrip.com/', 'http://www.xcar.com.cn/', 'http://www.qq163.com', 'http://www.samsung.com/', 'http://www.zol.com.cn/', 'http://www.taobao.com/', 'http://www.icbc.com.cn/', 'http://www.sto.cn', 'http://www.dianping.com', 'http://www.gougou.com', 'http://www.ct10000.com']

65:      link +=['http://www.qidian.com/', 'http://www.readnovel.com/', 'http://www.hongxiu.com/', 'http://www.bookge.com/', 'http://www.jjwxc.net/', 'http://hjsm.tom.com/', 'http://www.4yt.net/', 'http://www.cuiweiju.com/', 'http://book.sina.com.cn/', 'http://www.xxsy.net/', 'http://www.wansong.net/', 'http://www.myfreshnet.com/', 'http://www.fmx.cn/', 'http://www.xs8.cn/', 'http://www.rongshuxia.com/', 'http://www.booksky.org/', 'http://www.zhulang.com/', 'http://www.3320.net/', 'http://www.17k.com/', 'http://www.xhsd.net/', 'http://www.qukanshu.com/', 'http://www.fbook.net/', 'http://www.duyidu.com/', 'http://www.soso999.com/', 'http://www.junzitang.com/', 'http://msn.hongxiu.com/', 'http://www.yuanwen.com/', 'http://top.baidu.com/book.html', 'http://www.lcread.com/', 'http://www.sodu.com.cn/', 'http://www.cc222.com/', 'http://www.feiku.com/', 'http://book.hqdoor.com/', 'http://book.sooyuu.com/', 'http://www.52eshu.com/', 'http://bbs.91txt.com/', 'http://book.qq.com/', 'http://book.sohu.com/', 'http://www.baidu.com/search/guoxue/dir/fenlei.html', 'http://wind.yinsha.com/', 'http://www.duzhe.com/', 'http://www.storychina.cn/', 'http://www.shigeku.org/', 'http://www.goodmood.cn/', 'http://www.nlc.gov.cn/', 'http://www.qnwz.cn/', 'http://wenxue.xilu.com/']

66:      link +=['http://www.ganji.com/', 'http://www.58.com/', 'http://www.baixing.com/', 'http://www.263.com/', 'http://www.kuxun.cn/', 'http://www.mangocity.com/', 'http://www.qunar.com/', 'http://www.dianping.com/', 'http://www.fantong.com/', 'http://www.55bbs.com/', 'http://www.19lou.com/', 'http://www.koubei.com/', 'http://www.nike.com.cn/', 'http://www.li-ning.com.cn/', 'http://www.bosideng.com/', 'http://www.pirateship.com.cn/', 'http://www.goelia.com.cn/', 'http://www.adidas.com/', 'http://www.converse.com.cn/', 'http://www.romon.com/index.php', 'http://www.youngor.com/', 'http://www.etam.com.cn', 'http://www.heilanhome.com/', 'http://www.mizuno.com.cn/', 'http://www.goldlion-china.com/', 'http://www.phland.com.cn/', 'http://www.betu.com.hk/', 'http://www.puma.com.cn/', 'http://www.anta.com/', 'http://www.pierrecardin.com.cn/', 'http://www.bobdog.com.cn/', 'http://www.idaphne.com/', 'http://www.e-giordano.com/', 'http://www.361sport.com/', 'http://www.levi.com.cn/', 'http://www.lee.com.cn/', 'http://www.shanshan.com/', 'http://www.semir.com', 'http://www.versace.com/flash.html', 'http://www.k-boxing.com/', 'http://only.nzn.cn/', 'http://www.pb89.com/%20', 'http://www.aimer.com.cn/', 'http://www.balenciaga.com', 'http://www.ordifen.com.cn/', 'http://www.ochirly.com/', 'http://www.uggaustralia.com/', 'http://www.jshyx.com/', 'http://www.givenchy.com/default.php', 'http://www.thenorthface.com.cn/', 'http://www.tissot.com.hk/', 'http://www.azona.com.hk/', 'http://www.3suisses.com.cn/', 'http://www.valentino.it/', 'http://www.yishion.com.cn/', 'http://www.chowtaiseng.com/', 'http://www.tsljewellery.com/', 'http://www.jeanswest.com/', 'http://www.baoxiniao.com.cn/', 'http://www.qsyr.com/%20', 'http://www.septwolves.com/', 'http://www.baleno.com.hk/', 'http://www.belle.com.cn/', 'http://www.teenmix.com.cn/', 'http://www.fairwhale.com.cn/', 'http://www.swatch.com.cn/', 'http://www.staccato.com/', 'http://www.daphne.com.cn/', 'http://www.c-banner.com/', 'http://www.xtep.com.cn/', 'http://www1.jeanswest.com.cn/', 'http://www.kappa.com.cn/', 'http://www.laofengxiang.com/', 'http://www.cnhqt.com/', 'http://www.tatashoes.com.cn/', 'http://www.robinhood.com.cn/', 'http://www.doublestar.com.cn/', 'http://www.ozarkgear.com.cn/', 'http://www.aokang.com.cn/', 'http://www.ctf.com.cn/', 'http://www.crpttan.com/', 'http://www.calvinklein.com/', 'http://www.citizen.com.cn/', 'http://www.longines.com/', 'http://www.jackjonescn.net/', 'http://www.famoustone.com/', 'http://www.kfc.com.cn/', 'http://www.bjyoshinoya.com.cn/', 'http://www.starbucks.cn/', 'http://www.icoke.cn/', 'http://www.mengniu.com.cn/', 'http://www.mcdonalds.com.cn/', 'http://www.yonghe.com.cn/', 'http://www.ubccn.com/', 'http://www.dicos.com.cn/', 'http://www.yili.com/', 'http://www.pizzahut.com.cn/', 'http://www.quanjude.com.cn/direct.php', 'http://www.nescafe.com.cn/', 'http://www.masterkong.com.cn/', 'http://www.heinz.com.cn/', 'http://www.origus.com/', 'http://www.xfy.com.cn/', 'http://www.haagendazs.com.cn/', 'http://www.wyeth.com.cn/', 'http://www.moutaichina.com/index.asp', 'http://www.tsingtao.com.cn/', 'http://www.meadjohnson.com.cn/', 'http://www.dumex.com.cn/', 'http://www.wuliangye.com.cn/', 'http://www.zkungfu.com/', 'http://www.dovechocolate.com.cn/', 'http://www.ganso.com.cn/%20%20%20', 'http://www.beingmate.com/', 'http://www.waffleboy.com.cn/', 'http://www.holiland.com.cn/', 'http://www.goldenjaguar.com/', 'http://www.huiyuan.com.cn/%20%20%20', 'http://www.hsufuchifoods.com/%20%20%20%20', 'http://www.maybellinechina.com/', 'http://www.dabao.com/', 'http://www.lorealchina.com/', 'http://www.shiseidochina.com/', 'http://www.esteelauder.com.cn/', 'http://www.avon.com.cn/PRSuite/home/home.jsp', 'http://www.tjoy.biz/', 'http://www.lancome.com.cn/_zh/_cn/index.aspx', 'http://www.kose.co.jp/', 'http://www.h2oplus.com.hk/', 'http://www.yuesai.com.cn/', 'http://www.nivea.com.cn/', 'http://www.chanel.com/', 'http://www.clinique.com.cn/index.tmpl?ngextredir=1', 'http://www.ponds.com.cn/', 'http://www.vichy.com.cn/', 'http://www.efu.org.cn/', 'http://www.laneigechina.com/Front-Page/index2.jsp', 'http://www.olay.com.cn/', 'http://www.guerlain.com.cn/', 'http://www.aupres-shiseido.com.cn/', 'http://www.dior.com/pcd/International/JSP/Home/prehomeFlash.jsp', 'http://www.herborist.com.cn/', 'http://www.dhc.net.cn/', 'http://www.ysl.com/', 'http://www.kose.com.cn/', 'http://www.liangfei.com/', 'http://www.tayoi.com/', 'http://www.chcedo.com/', 'http://www.head-shoulders.com.cn/', 'http://www.slek.com.cn/', 'http://www.mentholatum.com.cn/', 'http://www.pg.com.cn/', 'http://www.china-ajjj.com/', 'http://www.rejoice.com.cn/', 'http://www.cnnice.com/', 'http://www.watsons.com.cn/', 'http://www.unilever.com.cn/', 'http://www.ikea.com/cn/zh/', 'http://www.pantene.com.cn/', 'http://www.colgate.com.cn/app/Colgate/CN/HomePage.cvsp', 'http://www.auchan.com.cn/', 'http://www.c-bons.com.cn/', 'http://www.carrefour.com.cn/', 'http://www.vs.com.cn/', 'http://www.crest.com.cn/', 'http://www.tongrentang.com/', 'http://www.amway.com.cn/index.aspx', 'http://www.wal-martchina.com/', 'http://www.tupperware.com.cn/', 'http://www.ourlotus.com/', 'http://www.skyworth.com/cn/', 'http://www.sony.com.cn/', 'http://www.siemens.com.cn/', 'http://www.gree.com.cn/', 'http://www.shinco.com/', 'http://www.midea.com.cn/', 'http://www.samsung.com.cn/', 'http://www.hitachi-shha.com.cn/', 'http://www.electrolux.com.cn/', 'http://www.toshiba.com.cn/', 'http://www.panasonic.com.cn/', 'http://www.canon.com.cn/', 'http://www.tcl.com/', 'http://www.lg.com.cn/', 'http://cn.changhong.com/', 'http://www.haier.com/', 'http://www.philips.com.cn/', 'http://www.konka.com/', 'http://www.rsd.com.cn/', 'http://www.supor.com.cn/', 'http://www.fotile.com/', 'http://www.cnsuning.com/', 'http://www.sharp.cn/', 'http://www.galanz.com.cn/', 'http://www.chinamacro.cn/', 'http://www.robam.com/', 'http://www.gome.com.cn/', 'http://www.joyoung.com.cn/', 'http://www.staccato.com/', 'http://www.meiling.com/', 'http://www.fushibao.com/', 'http://www.sacon.cn/', 'http://www.yongle.com.cn/', 'http://www.xinfei.com/']

67:      t_url = []   #urllib2 每个url的消耗时间的列表

68:      t_curl = []   #pycurl 每个url的消耗时间的列表

69:      f = "./time.csv"    #保存相关数据,供进一步分析

70:      inf = open(f,'a')

71:      for index, each in enumerate(link):

72:          # urllib2

73:          a = time.time()

74:          aa = fetch_url(each)

75:          b = time.time()

76:          # pycurl

77:          bb = fetch_url2(each)

78:          c = time.time()

79:          t_url.append(b-a)

80:          t_curl.append(c-b)

81:      # 保存urllib2的数据

82:      sum_url=0

83:      inf.write("urllib2\n")

84:      for each in t_url:

85:          inf.write(str(each)+"\n")

86:          sum_url += each

87:      inf.write("\n\n")

88:      # 保存pycurl的数据

89:      inf.write("pycurl\n")

90:      sum_curl = 0

91:      for each in t_curl:

92:          inf.write(str(each)+"\n")

93:          sum_curl += each

94:      print "urllib2 平均时间:%f, pycurl平均时间:%f" % (sum_url*1.0/len(t_url), sum_curl*1.0/len(t_curl))

95:      inf.close()

96:      print "结束:",dt.datetime.now()

97:

98:  if __name__ == "__main__":

99:      for i in xrange(7):

100:          url_vs_curl()

附相关资料:

urllib2是python的一个获取url(Uniform Resource Locators,统一资源定址器)的模块。它用urlopen函数的形式提供了一个非常简洁的接口。这使得用各种各样的协议获取url成为可能。它同时 也提供了一个稍微复杂的接口来处理常见的状况-如基本的认证,cookies,代理等等。这些都是由叫做opener和handler的对象来处理的。urllib2属于python内置模块。

Libcurl (http://curl.haxx.se/libcurl/)的介绍:

libcurl 是免费而且易于使用的客户端的 URL 传输库,支持 FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP。libcurl 支持 HTTPS 认证, HTTP POST, HTTP PUT, FTP 上传, kerberos, 基于 HTTP 表单的上传,代理,cookies,用户名+密码认证,文件传输恢复,http 代理封装等!

libcurl 是高度可移植的,它在大量平台上都有构建和一致的工作,包括: Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HP-UX, IRIX, AIX, Tru64, Linux, Windows, Amigo, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS 和更多......

libcurl 是免费、线程安全、IPv6 安全、特性丰富,良好支持和快速的。

pycurl官方地址http://pycurl.sourceforge.net 官网上有各个版本的pycurl和相关文档。

转载于:https://my.oschina.net/u/2028/blog/485742

Pycurl的简单使用与对比相关推荐

  1. Pycurl的简单使用与对比 - 一只橘子的异想世界

    Pycurl的简单使用与对比 - 一只橘子的异想世界 Pycurl的简单使用与对比 - 一只橘子的异想世界 Pycurl的简单使用与对比 十二月 5th, 2010 标签: python,pycurl ...

  2. 超级简单的Region对比识别验证码

    在一些验证码相对简单的站点中,停一下,什么是简单?以我现在的图形算法修为,就是对于特定的字符,在生成时,其字符的Region应该是一样的,如(chars.bmp)图片中的6总是这个字体这个字号.... ...

  3. H5页面制作简单上手工具对比

    以下-用了大概五天做一份H5+间接性听歌入魔,简单对比以下制作工具iH5和Epub360的使用心得: 1.界面美观来看,个人认为iH5逼格更高一点-派有些孩子气(??) 2.模板来说,iH5的模板更好 ...

  4. Unity人脸识别(一),基于百度大脑的Unity3dC#简单的人脸对比(搜索)功能,适合小白入门

    离线版人脸识别参考我的另外一篇博客:https://blog.csdn.net/GottaYiWanLiu/article/details/90442274 最近忽然对物联网开发蛮感兴趣,但无奈物联网 ...

  5. EXCEL---一个简单的查询--对比大佬的方法,学习几个函数 mmult sign find subtitute lookup( , 0/) 等用法

    原始数据 已经知道表2 现在需要在表1 中整理,让表1的业绩列显示出来. 方法3: 大佬的方法 确实很牛逼,不需要辅助列,而且是通过比对 2个数组,完全相同才匹配上 LOOKUP(,0/(MMULT( ...

  6. pycurl和urllib2的比较

    转自:http://www.cnblogs.com/lexus/archive/2012/04/08/2437336.html Pycurl的简单使用与对比 十二月 5th, 2010 标签: pyt ...

  7. java-pdf合并三种方法实现以及简单效率对比

    在之前项目有个功能中需要做多个PDF合并,而且可能pdf数量会很多,所以在实现了三种方式后做了一下简单的时间对比 第一种方法 用的spire.doc.free依赖 <dependency> ...

  8. matlab页面设计对齐,掌握对齐和对比,排版简单又好看!

    掌握对齐和对比,排版简单又好看! 2月 22, 2021 发表于: 视觉设计. 评论 Sponsor 前言:很多初学者不会做排版,想系统的学习排版设计嘛又觉得不够时间,今天我们来给大家分享两个好用的排 ...

  9. Python 自动化办公之 Excel 对比工具

    作者 | 周萝卜 来源丨萝卜大杂烩 今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于 ...

最新文章

  1. 学python就业要看哪些书-学习Python适合就业哪些岗位?老男孩Python学习
  2. 如何在NEO共识节点间分配任务
  3. JAVA实现HTTPserver端
  4. Chrome 技术篇-常用web调试技巧清除缓存并硬性重新加载
  5. Linux静默安装oracle
  6. 修改shape数据 小数位数_【数据管理】Excel实用精华
  7. 最小生成树——Kruskal(克鲁斯卡尔)算法
  8. Mysql面试热身题集总结
  9. “单细胞”前瞻 |新型微滴反应筛选技术ATAC-seq数据分析新篇章
  10. java接收参数_javaWeb收传参数方式总结
  11. Java 8 特性 – 终极手册
  12. [Linux网络编程学习笔记]索引
  13. 容器技术Docker K8s 6 阿里云容器服务体系介绍
  14. 互联网视频直播技术(广电总局、优酷土豆、XX直播)
  15. oracle相克军,Oracle视频课程在线观看与下载-甲骨论-172
  16. cad对计算机专业的用处,CAD软件的特点和用途
  17. 经典教材《晶体管电路设计》
  18. mac gif图片压缩
  19. 2021年山西省粮食种植面积增长,夏粮获大丰收,但因秋粮遭遇自然灾害粮食产量下降[图]
  20. 抖音账号都是如何出售的

热门文章

  1. 山大青岛计算机学院郑雯,山东大学自招700余人过线 面试将刷掉20%考生
  2. ddb文件怎么打开?PROTEL 99se软件pcb设计下载安装使用教程(5)
  3. 前端渲染和后端渲染,要说的都在这里?
  4. nvm安装成功后npm命令'npm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  5. windows平台mosquitto的安装与使用
  6. js判断移动终端(手机浏览器)
  7. 我真希望有人在我学计算机之前,就告诉了我这100多个程序员学习网站!【全编程人员都可以看】
  8. 二维数组和二维数组名
  9. 简历中的项目经历怎么写?
  10. Fields、Fieldvalues和Fieldbyname的区别