设为首页 收藏本站
查看: 1307|回复: 0

[经验分享] python学习第十五章——python和万维网

[复制链接]

尚未签到

发表于 2017-4-26 06:24:10 | 显示全部楼层 |阅读模式
  1.屏幕抓取:可以使用urllib获取网页的HTML源代码,然后使用正则表达式提取信息即可。下面是一个例子:
DSC0000.jpg

这种方法有至少3个缺点:如果HTML代码比较复杂,则表达式会乱七八糟不可维护。程序对于CDATA部分和字符实体(比如&)之类的HTML特性是无法处理的。正则表达式被HTML源代码约束,而不是取决于更抽象的结构,这就意味着网页结构中很小的改变就会导致程序中断。接下来会有两种方案解决这个程序所产生的问题,第一个方案是使用叫做Tidy的程序和XHTML解析;第二个方案则使用Beautiful Soup库,它专门为屏幕抓取设计。
2.Tidy:Tidy是用来修复不规范且随意的HTML的工具,会确保文件的格式是正确的(也就是所有元素都正确嵌套),这样解析的时候就比较方便了。Tidy库的获取和安装是比较简单的,这里就不讲了。
  现在假设有个叫做messy.html的混乱的HTML文件,下面的程序会对该文件运行Tidy,然后打印结果:
DSC0001.jpg

  3.使用HTMLParser:上面获得了格式良好的XHTML代码之后,我们就可以使用标准库模块HTMLParser进行解析了。我们只需继承HTMLParser并且对handle_starttage或handle_data等事件处理方法进行覆盖。下图总结了一些相关的方法,以及解析器在何时对它们进行自动调用。
DSC0002.jpg

  下面的这段代码是使用HTMLParser模块获取网页:
DSC0003.jpg

  4.Beautiful Soup:下载BeautifulSoup.py文件,将它放置在python路径中(比如python安装文件夹里面的site-packages目录)。下面的例子是使用它进行屏幕抓取的程序:
DSC0004.jpg

5.使用CGI创建动态网页:
第一步:CGI程序应该放在通过网络可以访问的目录中,并且必须将它们标识为CGI脚本,方法有两种:将脚本放在叫做cgi-bin的子目录中;把脚本文件扩展名改为.cgi。
第二步:加入pound bang行:当把脚本放在正确位置后,需要在脚本的开始处增加pound bang行。即只要将#!/usr/bin/env pthon加到脚本开始处就可以了。在windows中,需要使用#!c:\python22\python.exe。
第三步:设置文件许可:chmod 755 somescript.cgi,这样就可以将脚本作为网页打开了,并且执行。一般来说不允许CGI脚本修改计算机上的任何文件,如果想要它修改文件,必须显式地给它设置相应的许可。这时有两个选择,如果有root权限的话,可以为你的脚本创建一个用户账户,改变需要修改的文件的所有权。如果没有root全选,则可以为文件设置文件许可,这样系统上的所有用户都被允许写文件。chmod 666 editable_file.txt。
  6.简单的CGI脚本:例子如下:
DSC0005.jpg

例子中的Content-type这行表明页面是普通文件,如果页面为HTML,这一行应该是这样:print 'Content-type: text/html'。
7.使用cgitb调试:只需要在#!/usr/bin/env pthon后面加入import cgitb:cgitb.enable()这行即可,当cgi脚本有程序错误的时候,在网页上就会显示详细的错误信息。
  8.使用cgi模块:我们通常需要脚本接收任何形式的输入。输入是通过HTML表单提供给CGI脚本的键值对或称字段。可以使用cgi模块的FieldStorage类从CGI脚本中获取这些字段。当创建FieldStorage实例时(应该只创建一个),它会从请求中获取输入变量(或者字段),然后通过类字典借口将它们提供给程序。FieldStorage的值可以通过普通的键查找方式访问。获取值的简单方式就是用getvalue()方法,它类似于字典的get方法,但它会返回项目的value特性的值。如:form=cgi.FieldStorage();name=form.getvalue('name','unknow')这里我提供了一个默认值,如果不提供的话,就会将None作为默认值使用,默认值用于字段没有值的情况。下面是一个完整的简单例子:
DSC0006.jpg

CGI脚本的输入一般都是从已经提交的web表单中获得,但是也可以直接使用参数调用CGI程序,如http://www.someserver.com/simple.cgi?name=a&age=1。使用urllib模块的urlencode方法可以创建此类的URL查询:urllib.urlencode("name":"a","age":"1");
  9.创建表单:如下:
DSC0007.jpg

在脚本的开始处先获取CGI参数name,使用默认的'world'。如果打开浏览器而不提交任何东西,程序使用默认值。
  10.mod_python:安装,在unix上首先下载mod_python的源代码,然后解压缩,进入目录。接着运行mod_python的configure脚本:./configure --with-apxs=/usr/local/apache/bin/apxs,如果apxs不在这个位置,需要修改apxs程序的路径。然后编译所有的文件:make。接着就是安装了:make install。在windows上可以在http://www.apache.org/dist/httpd/modpython/win上下载,然后双击运行即可。配置apache:找到为特定模块使用的apache配置文件,文件通常叫做httpd.conf或者apache.conf,在unix中增加LoadModulepython_module lobexec/mod_python.so,在windows中增加LoadModule python_module modules/mod_python.so。现在apache指导到哪里找mod_python了,但是还是不能使用:得告诉它什么时候去找。必须在apache的配置文件中增加几行代码,可以在主配置文件中(可能是commonapache2.conf)或者放在名为.htaccess的文件中,该文件所在目录中有用于web访问的脚本。下面假设使用.htaccess文件,如果有的话,可以像下面这样将指令打包:
DSC0008.jpg

  如果要使用CGI处理程序,要将下面的代码放在放置CGI脚本所在目录中的.htaccess文件内:
DSC0009.jpg

需要调试信息的话,加上PythonDebug On即可。当开发完成之后应该取出这些指令。
  如果需要支持PSP页面需要加上如下代码:
DSC00010.jpg

  下面是一个带有少量随机数据的PSP例子:
DSC00011.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369202-1-1.html 上篇帖子: MyEclipse 安装 使用 Python 下篇帖子: 自己动手从源代码手动安装Python -- 搭建服务器Python 运行环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表