Python网络编程的应用与网页数据的处理

(一)网络概要

网络系统(network system)是使用OSI/ISO(Open Systems Interconnection/International Standards Organization),国际标准化组织制定的开放系统互连七层模型(seven-layer model)来定义。这七层模型代表七层的网络进程:物理层,数据链路层,网络层,传输层,会话层,表示层,以及应用层。
现在的网络协议(包括TCP/IP)实际上会使用较少的层数,而不是OSI定义的完整层数。所以当想要将TCP/IP会话映射到OSI模型时,常会弄不清楚发生什么问题。因为有些层已经合并,有些则是已经删除。

(二)socket模块

1.认识socket模块
socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。socket模块提供了标准的网络接口,可以访问底层操作系统socket接口的全部方法。
Python使用socket()函数来创建套接字,语法格式如下:
socket.socket([family[, type[, protocol]]])

2.创建socket连接
使用socket模块的socket函数来创建一个socket对象。
socket对象可以通过调用其他函数来设置一个socket服务。
通过调用 bind(hostname, port) 函数来指定服务的port(端口)。
然后调用socket对象的accept 方法。
该方法等待客户端的连接,并返回connection对象,表示已连接到客户端。

(三)HTTP库

1.socketserver模块
socketserver模块提供一个架构,来简化网络服务器的编写工作。
用户不需要使用低级的socket模块,socketserver模块提供四个基本的server类:TCPServer,UDPServer,StreamRequestHandler以及DatagramRequestHandler。这些类处理同步的要求,每一个请求都必须在下一个请求开始前完成。但是如果是客户端需要长时间的计算,这些类就不适合。
为了以个别的线程来处理要求,可以使用下列类:ThreadingTCPServer,ThreadingUDPServer,ForkingTCPServer以及ForkingUDPServer。
StreamRequestHandler与DatagramRequestHandler类提供两个属性:self.rfile与self.wfile,可以用来在客户端应用程序读/写数据。

2.server模块
http模块的子模块server提供各种HTTP服务。
主要包括BaseHTTPServer类、CGIHTTPServer类与SimpleHTTPServer类。
server模块定义两个基类,来操作基本的HTTP服务器(也称为网站服务器)。此模块以socketserver模块为基础,并且很少直接使用。
server模块的第一个基类是HTTPServer类,其语法为:
class HTTPServer((hostname, port), RequestHandlerClass)
HTTPServer类由socketserver.TCPServer类派生。此类创建一个HTTPServer对象,并且监听(hostname, port),然后使用RequestHandlerClass来处理要求。

3.client模块
client模块主要处理客户端的请求。client模块的HTTPConnection类创建并且返回一个connection对象。HTTPConnection类的语法如下:
class HTTPConnection ([hostname [, port]])
如果没有设置参数port,默认值是80。如果所有的参数都没有设置,必须使用connect()方法来自行连接。

(四)urllib库

1.request模块
request模块是使用socket来读取网络数据的接口,支持HTTP,FTP,以及gopher等连接。
要读取一个网页文件,可以使用urlopen()方法。语法如下:
urllib.request.urlopen(url [, data])
其中参数url是一个URL字符串;参数data用来指定一个GET请求。

2.parse模块
parse模块解析URL字符串,并且返回一个元组:(addressing scheme, netword location, path, parameters, query, fragment identifier)。parse模块可以将URL分解成数个部分,然后再组合回来,并且可以将相对地址转换成绝对地址。

(五)ftplib模块

FTP(File Transfer Protocol)是一种在网络上传输文件的普遍方式,因为在大部分的操作系统上都有客户端的FTP与服务器端的FTP服务。服务器端的FTP可以同时使用在私有(private)的用户,与匿名(anonymous)的用户。
私有的服务器端FTP只允许系统用户来连接,匿名的服务器端FTP则允许不需帐号即可以连接网络来传输文件。使用匿名的服务器端FTP,会产生安全性的问题。
FTP提供一个控制端口与一个数据端口,在服务器端与客户端之间的数据传输使用独立的socket,以避免死机的问题。
Python中默认安装的ftplib模块定义了FTP类,可用来创建一个FTP连接,用于上传或下载文件。FTP类的语法如下所示:
class FTP([host [, user [, passwd [, acct]]]])
其中host是主机名称,user是用户帐号,passwd是用户密码。

(六)电子邮件服务协议

1.smptlib模块
Python的smptlib模块提供SMTP协议的客户端接口,用来传输电子邮件到网络上的其他机器。
smptlib模块定义一个SMTP类,用来创建一个SMTP连接。
SMTP类的语法如下所示:
class SMTP([host [, port]])
其中参数host是主机名称。下列是SMTP类的实例变量的方法列表:
⑴ connect(host [, port]):连接到(host, port),port的默认值是25。
⑵ sendmail(from_addr, to_addrs, msg [, mail_options, rcpt_options]):送出电子邮件。from_addr是RFC 822 from-address字符串,to_addr是RFC 822 to-address字符串。msg是一个信息字符串。
⑶ quit():结束SMTP连接。

2.poplib模块
Python的poplib模块提供POP3协议的客户端接口,用来从网络上接收电子邮件。
poplib模块定义一个POP3类,用来创建一个POP3连接。
POP3类的语法如下所示:
class POP3([host [, port]])
其中host是主机名称,port的默认值是110。

3.imaplib模块
Python的imaplib模块提供IMAP协议的客户端接口。imaplib模块定义一个IMAP4类,用来创建一个IMAP连接。IMAP4类的语法如下所示:
class IMAP4([host [, port]])
其中host是主机名称,port的默认值是143。
下列是IMAP4类的实例变量的方法列表:
⑴ fetch(message_set, message_parts):取出信息。
⑵ login(user, password):登录IMAP4服务器。
⑶ logout():注销IMAP4服务器,关闭连接。
⑷ search(charset, criterium [, …]):搜索邮件信箱找出符合的信息。
⑸ select([mailbox [, readonly]]):选择一个邮件信箱。

(七)新闻群组

nntplib模块提供客户端的NNTP协议的接口,NNTP(Network News Transfer Protocol)是一个提供新闻群组(newsgroup)的服务。NNTP协议使用ASCII文字,在客户端与服务器端之间传输数据,同时也用来交换服务器间的新闻稿。
nntplib模块定义一个NNTP类,用来创建一个NNTP连接。
NNTP类的语法如下所示:
class NNTP(host [, port [, user [, password [, readermode]]]])
其中host是主机名称,port的默认值是119。

(八)远程连接计算机

telnetlib模块提供客户端的Telnet协议的服务,Telnet协议用来连接远程的计算机,通常使用通信端口23。创建好Telnet连接后,就可以通过Telnet接口在远程的计算机上执行命令。
telnetlib模块定义一个Telnet类,用来创建一个Telnet连接。
Telnet类的语法规则如下所示:
class Telnet([host [, port]])
其中host是主机名称,port的默认值是23。

网页数据的处理
Python解析XML

1.使用SAX解析XML
python标准库包含(simple API for XML )SAX解析器,SAX是一种基于事件驱动的API,通过在解析XML的过程中触发一个个的事件,然后调用用户定义的回调函数来处理XML文件。
使用SAX解析XML文档主要包括两部分:解析器和事件处理器。其中解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;而事件处理器则负责调出相应的事件,对传递的XML数据进行处理。

2.使用DOM解析XML
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。DOM将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后可以利用DOM提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

XDR数据交换格式

XDR(eXternal Data Representation,外部数据表示)是数据描述与编码的标准,它使用隐含形态的语言来正确地描述复杂的数据格式。SunRPC(Remote Procedure Call,远程过程调用)与NFS(Network File System,网络文件系统)等协议,都使用XDR来描述它们的数据格式,因为XDR适合在不同的计算机结构之间传输数据。
Python语言通过提供的xdrlib模块来处理XDR数据,在网络应用程序上的应用非常广泛。xdrlib模块定义中定义了Packer类和Unpacker类,另外还定义了两个异常。

  1. Packer类
  2. Unpacker类
JSON数据解析

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Python中提供了json模块来对JSON 数据进行编码和解码。json模块中包含了以下两个函数:
⑴ json.dumps(): 对数据进行编码。
⑵ json.loads(): 对数据进行解码。

Python解析HTML

Python使用urllib包抓取网页后,需要将抓取到的数据交给HTMLParser解析,从而提取出需要的内容。Python提供了一个简单的解析模块HTMLParser类,使用起来也是比较简单,特别是新手用起来比较容易。
HtmlParser是一个类,在使用时一般继承它然后重载它的方法,来达到解析出需要的数据的目的。HtmlParser类的常用方法如下:

  • ⑴ handle_starttag(tag, attrs) :处理开始标签,比如 < div >;这里的attrs获取到的是属性列表,属性以元组的方式展示。
  • ⑵ handle_endtag(tag): 处理结束标签,比如< /div >。
  • ⑶ handle_startendtag(tag, attrs):处理自己结束的标签,如< img />。
  • ⑷ handle_data(data) :处理数据。例如标签之间的文本。
  • ⑸ handle_comment(data):处理注释。例如< !-- -->之间的文本。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值