生成html网站源码分享 生成html网站源码分享链接

大家好,如果您还对生成html网站源码分享不太了解,没有关系,今天就由本站为大家分享生成html网站源码分享的知识,包括生成html网站源码分享链接的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一:模块介绍

Pycurl是一个用C语言编写的libcurlPython实现,功能非常强大,支持操作协议有FTP,HTTP,HTTPS,TELNET等。与urllib相比,Pycurl的速度要很多。

二:安装

大家可以去官网下载与本地Python一直的whl或exe包。

也可以使用下面的命令行直接安装。

pipinstallpycurl

三:主要方法

pycurl.Curl()设置要访问的URL\n\npycurl.Curl().setopt(pycurl.MAXREDIRS,5)连接超时设置\n\npycurl.Curl().setopt(pycurl.USERAGENT,&34;)服务器端返回的信息\n\npycurl.Curl().getinfo(pycurl.HTTP_CODE)encoding=utf-8\nimportpycurl,traceback\nfromcom.fy.utils.html.HtmlCodeimportHtmlCodeUtils\nfromioimportBytesIO根据HTML源码获取网页编码\nself.c=pycurl.Curl()\nself.c.setopt(pycurl.CONNECTTIMEOUT,60)下载超时\nself.c.setopt(pycurl.MAXREDIRS,5)39;Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322)&模拟浏览器\n\ndefPyCurl_Html(self,url):\nself.requestCode=039;Accept:&获取网页编码\nresult=str(data.decode(html_code,&39;))\nself.requestCode=self.c.getinfo(self.c.HTTP_CODE)\nifresult!=None:print(len(result),self.requestCode)\nelse:print(self.requestCode)\nexcept:print(traceback.print_exc())\nreturnresult,self.requestCode\npyc=Utils_PyCurl()\nhtml,code=pyc.PyCurl_Html(&34;)\nprint(&34;,code)\nprint(html)

五:并发

大批量数据采集时,我们需要对上述的代码进行二次封装,实现并发处理,提高下载的速度。多线程是实现并发最基础的方式,这里就不再次介绍。今天我们介绍一下基gevent协程的并发处理。

1:Gevent介绍

gevent是Python世界中最重要的异步网络库,可以大幅度提高系统的性能。最可贵的是,它允许我们几乎不修改代码,把同步程序变为异步程序。

2016年是Python3的重要时刻。Scrapy刚宣布支持Python3不久,Gevent又宣布支持Python3了。

给大家一个编码建议:如果用Python2,只用Python2.7;如果使用Python3,请至少使用Python3.4,最好使用Python3.5

支持Python版本:

Python2.7及Python>=3.4

Gevent是基于协程的Python网络库。

包含的特性:

?基于libev的快速事件循环(Linux上epoll,FreeBSD上kqueue)。\n\n?基于greenlet的轻量级执行单元。\n\n?API的概念和Python标准库一致(如事件,队列)。\n\n?可以配合socket,ssl模块使用。\n\n?能够使用标准库和第三方模块创建标准的阻塞套接字(gevent.monkey)。\n\n?默认通过线程池进行DNS查询,也可通过c-are(通过GEVENT_RESOLVER=ares环境变量开启)。\n\n?TCP/UDP/HTTP服务器\n\n?子进程支持(通过gevent.subprocess)\n?线程池

2:安装

pipinstallwheel

pipinstallgevent或者pip3installgevent

具体安装命令视安装的Python的版本而定。当出现Successfullyinstalled……的提示后,即表示gevent安装成功。

如果中途出现异常,一定是依赖的包没有提前安装。具体的问题,根据提示处理,基本上就可以解决了。

3:基于的Gevent和pycurl并发模式改造后的完整代码如下:

如果没有给gevent打上补丁的话,它是检测不到除gevent它本省自带的IO操作的,当打上了补丁,它就能检测到程序其他所有的IO操作\nfromcom.fy.utils.html.HtmlCodeimportHtmlCodeUtils\nfromioimportBytesIO把当前程序的所有IO操作给我单独的做上标记\n根据HTML源码获取网页编码\nself.c=pycurl.Curl()\nself.c.setopt(pycurl.CONNECTTIMEOUT,60)下载超时\nself.c.setopt(pycurl.MAXREDIRS,5)39;Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322)&模拟浏览器\n\ndefgeventControl(self,tasks,urlFieldName):\nprint(&34;+str(len(tasks))+&34;)\nstart_time=time.time()\nself.urlFieldName=urlFieldName34;下载页面【完毕】,共历时:【&34;】s…..\\n&待处理的地址\nhtml=None返回的状态码\ntry:\nself.c.setopt(self.c.URL,host)\nself.c.setopt(self.c.HTTPHEADER,[&39;])\ne=BytesIO()\nself.c.setopt(self.c.WRITEFUNCTION,e.write)\nself.c.setopt(self.c.FOLLOWLOCATION,1)\nself.c.perform()\ndata=e.getvalue();\nhtml_code=self.hcu.getChardet(data)39;ignore&34;HTML-length:&34;HTTP_CODE:&34;request-url:&34;HTML-length:&34;HTTP_CODE:&34;request-url:&39;HTML&HTML源码\ntask[&39;]=requestCode39;url&34;文章地址&34;url”)\nend_time=time.time()\nprint((end_time-start_time))

通过上述改造完以后,对其做了个简单的测试。

样本URL:1000个,分十批,每批次100个URL。共历时49秒

用的是我的一个用了三年的笔记本,性能较差,如果是放在服务器的Linux环境下的话,30秒内下载完毕,绝对不在话下。

在分布式大批量采集中,使用多进程+协程并发的模式,单台服务器,一分钟下载1W个网页,绝对没有问题。

今天就说这么多了,改天介绍一下采集的整体架构

关于生成html网站源码分享和生成html网站源码分享链接的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平