热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python基础教程(第三版)学习笔记(十五)

第十五章python和web本章讨论PythonWeb编程的一些方面了其中三个重要的主题:屏幕抓取、CGI和mod_python。另外还给出了一些指南。15.1屏

第十五章 python和web

本章讨论Python Web编程的一些方面 了其中三个重要的主题:屏幕抓取、CGI和mod_python。 另外还给出了一些指南。


15.1 屏幕抓取

下面讨论两种抓取网站信息可能的解决方案。一是结合使用 程序Tidy(一个Python库)和XHTML解析;二是使用专为屏幕抓取而设计的Beautiful Soup库。


15.1.1 Tidy 和 XHTML 解析

1、Tidy是什么

Tidy是用于对格式不正确且不严谨的HTML进行修复的工具。

2、. 获取Tidy

有多个用于Python的Tidy库包装器,至于哪个最新并非固定不变的。可像下面这样使用pip 来找出可供使用的包装器:

pip search tidy

一个不错的选择是PyTidyLib,可像下面这样安装它:

pip install pytidylib

不管你使用的是哪种操作系统,都可从Tidy网站(http://html-tidy.org)获 取可执行的二进制版本。有了二进制版本后,就可使用模块subprocess(或其他包含popen函数的 模块)来运行Tidy程序了。

(由于windows上没有实现对tidy的支持,暂时略去)


15.1.2 Beautiful Soup

Beautiful Soup是一个小巧而出色的模块,用于解析你在Web上可能遇到的不严谨且格式糟糕 的HTML。Beautiful Soup网站(http://crummy.com/software/BeautifulSoup)称: 那个糟糕的网页并非出自你的手笔。你只是想从中提取一些数据。Beautiful Soup 将向你伸出援手。

安装:

pip install beautifulsoup4

使用Beautiful Soup的屏幕抓取程序 :

from urllib.request import urlopenfrom bs4 import BeautifulSouptext = urlopen('http://python.org/jobs').read()soup = BeautifulSoup(text, 'html.parser')jobs = set()for job in soup.body.section('h2'):jobs.add('{} ({})'.format(job.a.string, job.a['href']))print('\n'.join(sorted(jobs, key=str.lower)))

运行结果:

C:\Users\xx\AppData\Local\Programs\Python\Python37\python.exe E:/pythonProjects/zhao/tidy_01.pyBackend Developer (m/w) (/jobs/3572/)Backend Developper Django @sketchfab (/jobs/3589/)Backend Engineer (m/w) (/jobs/3579/)CAD Engineer - CAD Infrastructure (/jobs/3586/)Craftsmanship Focused / Test Loving Full Stack Web Dev - Python, React, SQL (/jobs/3580/)Data Engineer (/jobs/3565/)Database Administrator (/jobs/3568/)Django Developer (/jobs/3573/)Python Backend Developer (/jobs/3584/)Python Developer (/jobs/3574/)Python Developer (/jobs/3583/)Python Developer - AI & Deep Learning Start-up (/jobs/3571/)Senior Developer - Django (/jobs/3592/)Senior Rendering Developer (/jobs/3569/)Senior Software Developer (/jobs/3577/)Senior Software Engineeer - Python Full Stack Web Service (/jobs/3591/)Senior Software Engineer (lead Python developer) (/jobs/3585/)Software Developer (/jobs/3566/)Software Engineer (/jobs/3567/)Software Engineer (/jobs/3562/)Software Engineer (/jobs/3590/)Software Engineer (m/f) - Data Platform (/jobs/3564/)Software Engineer (m/f) - Performance Marketing (/jobs/3563/)Software Engineer -- Integrations (/jobs/3581/)UI Developer (/jobs/3570/)​Process finished with exit code 0


15.2 使用 CGI 创建动态网页

本节讨论基本的Web编程 技术:通用网关接口(CGI)。CGI是一种标准机制,Web服务器可通过它将(通常是通过Web表 达提供的)查询交给专用程序(如你编写的Python程序),并以网页的方式显示查询结果。这是 一种创建Web应用的简单方式,让你无需编写专用的应用程序服务器。


15.2.1 第一步:准备 Web 服务器

如果你只是想尝试使用CGI,可在Python中使用模块http.server直接运行一个临时Web服务 器。与其他模块一样,可通过向Python可执行文件提供开关-m来导入并运行这个模块。如果同时 指定了--cgi,启动的服务器将支持CGI。

在cmd中运行命令:

python -m http.server --cgi#将会出现以下语句,说明服务器运行正常。Serving HTTP on 0.0.0.0 port 8000 ...

此服务器的根目录是cmd打开时所处的目录。


15.2.2 第二步:添加!#行

将脚本放到正确的位置(还可能给它指定特定的文件扩展名)后,必须在其开头添加一个!# 行。

#!/usr/bin/env python

如果这样做不管用,就得确定Python可执行文 件的准确位置,并在!#行中使用完整的目录。

#!C:\Python37\python.exe

15.2.3 第三步:设置文件权限

通常,CGI脚本不能修改计算机上的任何文件。要让它能够修改文件,必须显式地赋予它权 限。


15.2.4 CGI 安全风险

使用CGI程序存在一些安全风险。如果你允许CGI脚本对服务器中的文件执行写入操作,那 么这可能被人利用来破坏数据——除非编写脚本时非常小心。同样,如果直接将用户提供的数据 作为Python代码(如使用exec或eval)或shell命令(如使用os.system或模块subprocess)执行, 就可能执行恶意的命令,进而面临极大的风险。即便在SQL查询中使用用户提供的字符串也很危 险,除非你预先仔细审查这些字符串。SQL注入是一种常见的攻击系统的方式。


15.2.5 简单的 CGI 脚本

最简单的CGI脚本类似于以下代码:

#!/usr/bin/env pythonprint('Content-type: text/html') print()# 打印一个空行,以结束首部print('Hello, world!')

如果将这些代码保存为文件simple1.cgi并通过Web服务器打开它,将看到一个网页,其中只 包含纯文本Hello, world!。


15.2.6 使用 cgitb 进行调试

(由于CGI我没有能够在windows下实现故略去)


15.3 使用 Web 框架

对于重要的Web应用,大多数人都不会直接为其编写CGI脚本,而是选择使用Web框架,因 为它会替你完成很多繁重的工作。这样的框架有很多,后面将提及其中的几个,但现在要将注意 力放在既简单又有用的Flask(http://flask.pocoo.org)上。使用pip很容易安装这个框架。

pip install flask

一个简单的程序:

#!/usr/bin/env python 3# -*-coding utf-8 -*-from flask import Flaskapp=Flask(__name__)​@app.route('/')def hello_world():return "hello World!"​if __name__== '__main__':app.run()

运行结果:

C:\Users\xx\AppData\Local\Programs\Python\Python37\python.exe E:/pythonProjects/twisted/finger.py* Serving Flask app "finger" (lazy loading)* Environment: productionWARNING: Do not use the development server in a production environment.Use a production WSGI server instead.* Debug mode: off* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)127.0.0.1 - - [17/Nov/2018 16:17:00] "GET /get-log/trace?_=1542435675262 HTTP/1.1"

 

要详细了解Flask框架可参阅如下网址:http://docs.jinkan.org/docs/flask/quickstart.html

其他 Web 应用框架

Django https://djangoproject.com

TurboGears http://turbogears.org

web2py http://web2py.com

Grok https://pypi.python.org/pypi/grok

Zope2 https://pypi.python.org/pypi/Zope2

Pyramid https://trypyramid.com


15.4 Web 服务:更高级的抓取


15.4.1 RSS 和相关内容

RSS指的是富网站摘要(Rich Site Summary)、RDF网站摘要(RDF Site Summary)或简易信 息聚合(Really Simple Syndication),具体指哪个取决于版本。在最简单的情况下,RSS是一种以 XML方式列出新闻的格式。


15.4.2 使用 XML-RPC 进行远程过程调用

除简单的RSS下载和解析机制外,还有远程过程调用。远程过程调用是对基本网络交互的抽 象:客户端程序请求服务器程序执行计算并返回结果,但这个过程被伪装成简单的过程(函数或 方法)调用。在客户端代码中,远程过程调用看起来就像普通方法调用,但用来调用方法的对象 实际上位于另一台计算机中。XML-RPC可能是最简单的远程过程调用机制,它使用HTTP和XML 来实现网络通信。鉴于这种协议是独立于语言的,使用一种语言编写的客户端程序可轻松地调用 使用另一种语言编写的服务器程序中的函数。 Python标准库提供了对客户端和服务器端XML-RPC编程的支持。


15.4.3 SOAP

SOAP①也是一种将XML和HTTP用作底层技术的消息交换协议。与XML-RPC一样,SOAP也 支持远程过程调用,但SOAP规范比XML-RPC规范复杂得多。SOAP是异步的,支持有关路由的 元请求,而且类型系统非常复杂(而XML-RPC使用简单而固定的类型集) 。SOAP 是微软 .net 架构的关键元素,用于未来的因特网应用程序开发 。

 

(待续)


推荐阅读
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
author-avatar
patrick0129_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有