web编程 模块1 html,PYcore python programming笔记C20 Web编程



C20 Web编程

20.1介绍

C/S架构  服务端永远运行

HTTP协议 :无状态协议,不跟踪一个客户端到另一个客户端的请求,但会被处理为独立的服务请求

使用URL和cookie保存信息

URL  统一资源定位器

URI   统一资源标识器

URL是URI的一部分

prot_sch://net_loc/path;params?query#frag

prot_sch网络协议或者下载规划

net_loc  服务器位置和用户信息 具体为user:passwd@host:port

path       斜杠(/)限定文件或者CGI应用程序的路径

params  可选参数

query      连接符(&)连接键值对

frag         拆分文档中的特殊锚

20.2.2  urlparse模块

.urlparse(urlstr,defProSch=None,allowFrag=None)    将urlstr解析成各个部件,allowFrag决定是否有零部件

>>>urlparse.urlparse('http://www.python.org/doc/FAQ.html')

('http','www.python.org','/doc/FAQ.html','','','')

.urlunparse(urlup)              将urlup元组组合成一个url字符串

.urljoin(baseurl,newurl,allowFrag=None)    ,将baseurl的部件的一部分替换成newurl(newurl不需要完整),

返回字符串

20.2.3  urllib模块#提供了一个高级Web库,避免了使用httplib、ftplib、gopherlib等底层模块

1.urllib.urlopen()

f=urllib.urlopen(urlstr,postQueryData=None)     #以文件类型打开URL

.read([bytes])             从f中读出所有或bytes个字节

.readline()                   从f中读出一行

.readlines()                 从f中读出所有行并返回一个列表

.close()                        关闭url

.fileno()                      返回f的文件句柄

.info()                          获得f的MIME头文件(通知使用哪类应用程序打开)

.geturl()                      返回f所打开的真正的url

2.urllib.urlretrieve(urlstr,local-file=None,downloadStatusHook=None)

将文件下载为localfile或者tempfile,如果已下载则downloadStautsHook有统计信息

3.urllib.quote(urldata,safe='/')

将urldata的无效的url字符编码,在safe列的则不必编码,使适用打印或web服务器

urlilib.quote_plus(urldata,safe='/')

将空格编译成(+)号(而非%20),其他功能同上

4.urllib.unquote(urldata)

将urldata解码

urllib.unquote_plus(urldata)

将加号解码成空格,其他同上

5.urllib.urlencode(dict)

将字典键--值对编译成有效的CGI请求字符串,用quote_plus()对键和值字符串分别编码

20.2.4 urllib2模块 #可以处理更复杂的请求,比如登录名和密码

方法一:建立一个基础认证服务器(urllib2.HTTPBasicAuthHandler),同时在基本URL或域上注册一个登录密码。

方法二:当浏览器提示的时候,输入用户名和密码,这样就发送了一个带有适当用户请求的认证头。

#urlopenAuth.py

import urllib2

LOGIN='wesc'

PASSWD="you'll never guess"

URL='http://localhost'

def handler_version(url):

from urlparse import urlparse as up

hdlr=urllib2.HTTPBasicAuthHandler()

hdlr.add_password('Archives',up(url)[1],LOGIN,PASSWD)

opener=urllib2.build_opener(hdlr)

urllib2.install_opener(opener)

return url

def request_version(url):

from base64 import encodestring

req=urllib2.Request(url)

b64str=encodestring('%s%s'%(LOGIN,PASSWD))[:-1]

req.add_header("Authorization","Basic %s"%b64str)

return req

for funcType in('handler','request'):

print '***using %s'%funcType.upper()

url=eval('%s_version'%funcType)(URL)

f=urllib2.urlopen(url)

print f.readline()

f.close()

20.3 高级Web客户端

网络爬虫:为搜索引擎建索引、脱机浏览、下载并保存历史记录或框架、Web页的缓存节约访问时间

#coding=UTF-8

#crawl.py

from sys import argv

from os import makedirs, unlink, sep

from os.path import dirname, exists, isdir, splitext

from string import replace, find, lower

from htmllib import HTMLParser

from urllib import urlretrieve

from urlparse import urlparse, urljoin

from formatter import DumbWriter, AbstractFormatter

from cStringIO import StringIO

class Retriever(object):#download Web pages

def __init__(self, url): #初始化

self.url = url

self.file = self.filename(url) #以filename方式新建文件

def filename(self, url, deffile='index.htm'): #开辟文件路径

parsedurl = urlparse(url, 'http:', 0)

path = parsedurl[1] + parsedurl[2] #域名和远程文件路径

ext = splitext(path)

if ext[1] == '': #no file ,ues default

if path[-1] == '/':

path += deffile #后缀

else:

path += '/' + deffile

ldir = dirname(path)

#print "thatis",ldir

if sep != '/':

ldir = replace(ldir, '/', sep) #以系统的分隔符替换'/'

if not isdir(ldir): #不存在则创建文档

if exists(ldir): unlink(ldir)

# print "thisis",ldir

makedirs(ldir or 'undenied')

return path

def download(self): #获取文件

try:

retval = urlretrieve(self.url, self.file)

except:

retval = ('*** ERROR: invalid URL "%s"' % self.url,)

print "download done"

return retval

def parseAndGetLinks(self): #定义获取links的方法

self.parser = HTMLParser(AbstractFormatter(DumbWriter(StringIO())))

self.parser.feed(open(self.file).read())

self.parser.close()

return self.parser.anchorlist

class Crawler(object):

count = 0

def __init__(self, url):

self.q = [url] #初始化队列

self.seen = []

self.dom = urlparse(url)[1] #域名部分

def getPage(self, url):

r = Retriever(url) #先下载了

retval = r.download() #下载的内容部分

if retval[0] == '*':

print retval, '... skipping parse'

return

Crawler.count += 1 #加一次爬取

print '\n(', Crawler.count, ')'

print 'URL:', url #打印链接

print 'FILE:', retval[0]

self.seen.append(url)#已爬取的添加到历史记录里

links = r.parseAndGetLinks()#获取links

for eachLink in links:

if eachLink[:4] != 'http' and find(eachLink, '://') == -1:

eachLink = urljoin(url, eachLink)#补充成完整链接

print '* ', eachLink,

if find(lower(eachLink), 'mailto:') != -1: #滤过邮件链接

print '... discarded, mailto link'

continue

if eachLink not in self.seen: #历史记录里未爬取

if find(eachLink, self.dom) == -1: #滤过非域内链接

print '... discarded, not in domain'

else:

if eachLink not in self.q:

self.q.append(eachLink) #判定为新的非重复链接,添加

print '... new, added to Q'

else:

print '... discarded, already in Q'

else:

print '... discarded, already processed'#判定已爬取

def go(self):

while self.q: #队列非空则继续爬取

url = self.q.pop() #从队列中取出

self.getPage(url) #下载并分析链接

def main():

if len(argv) > 1:

url = argv[1]

else:

try:

url = raw_input('Enter starting URL: ') #http://www.baidu.com/index.html

except:

url = ''

if not url: return

robot = Crawler(url) #入口,并初始化队列

robot.go()

if __name__ == "__main__":

main() #首先看看main函数吧,再看到go

20.4 CGI:帮助Web服务器处理客户端数据

#CGI程序与应用程序不同在于输入、输出及用户和计算机交互方面

#cgi模块主要类是FiledStorage,一旦实例化会具有一系列键值对,这些值本身可以是FiledStorage对象,也可以是MiniFiledStorage对象,或者是这些对象的列表。

20.5建立CGI应用程序

10.5.1建立Web服务器

可以用Apache

也可以建立一个基于web的简单服务器,默认8000端口

$ Python -m CGIHTTPServer

20.9相关模块 cgi   cgitb  htmllib   HTMLparser    htmlentitydefs cookie   cookielib  webbrowser    sgmllib  robotparser   httplib   xmllib   xml   xml.sax   xml.dom  xml.etree  xml.parsers.expat   xmlrpclib SimpleXMLRPCServer    DocXMLRPCServer    BaseHTTPServer   SimpleHTTPServer   CGIHTTPServer wsgiref  HTMLgen  BeautifulSoup   poplib   imaplib   email   mailbox  mailcap   mimetools   mimetypes MimeWriter   multifile quopri   rfc822   smtplib  base64   binascii  binhex uu httplib  ftplib  gopherlib telnetlib  nntplib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 根据类路径获取类_Java类加载器

类加载器Java程序可以通过类加载器来达到通过一个类的全限定类名来获取该类的二进制字节流。类与类加载器对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器都拥有一个独立的类名称空间。即时这…

rsync 服务快速部署手册

一、rsync服务端安装 1、查看rsync安装包 # rpm -qa rsyncrsync-3.0.6-12.el6.x86_642、安装rsync 系统默认都会安装rsync软件包的,如果查看发现没有安装,执行yum安装即可# yum install rsync -y3、添加rsync服务的用户,管理本地目录的 # use…

C# 用户控件事件

当用户控件中btnNeed按钮被点击时,激活本用户控件的BtnClick事件,此事件可以在页面中捕获。-----------用户控件---------------protected void btnNeed_Click(object sender, EventArgs e) { if (BtnClick ! null) Bt…

html不支持元素video,Html5中的Video元素使用方法

现在互联网视频大都使用Flash来实现。但是不同的浏览器可能使用不同的插件。在HTML5中则提供了一个统一的方式来展示视频内容。HTML5 video在Internet Explorer 9, Firefox, Opera, Chrome, 和Safari都支持。IE8及其更早的浏览器不支持。代码如下Your browser does not support…

Matlab命令大全

MATLAB命令大全管理命令和函数help 在线帮助文件doc 装入超文本说明what M、MAT、MEX文件的目录列表type 列出M文件lookfor 通过help条目搜索关键字which 定位函数和文件Demo 运行演示程序Path 控制MATLAB的搜索路径管理变量和工作空间…

千牛通知栏常驻是什么意思_店铺运营|内贸1688 店铺真正的权重是什么?

想必大家都听说过店铺权重/单品权重/客户标签 这些名词。那到底是怎么操作的呢? 以下是简单的大纲:店铺权重的拆解拆分里面的小指标,看看我们有没有操作的空间单品的权重拆分里面的小指标,有哪些因素是我们能够控制的?…

初入网络系列笔记(6)TFTP协议

一、借鉴说明,本博文借鉴以下博文 1.锤子,FTP协议,http://www.cnblogs.com/loadrunner/archive/2008/01/09/1032264.html 2.sunada,FTP协议及工作原理详解,http://www.cnblogs.com/sunada2005/articles/2781712.html 3…

计算机科学与技术班级口号八字,班级的八字口号

第1篇:初中班级八字口号1.拼搏奋进、永远进步2.全民健身、利国利民3.健康第一、从我做起4.零二零二,独一无二5.零三零三,奋勇争先6.四班四班,锐不可当7.展现自我、争创新高8.奥运精神、永驻我心9.强身健体、立志成材10.顽强拼搏、…

Prolog学习笔记100805

//love(zhangxueyou,wanfei). 爱(张学友,王菲). “张学友爱王菲”。prolog是不允许使用除了基本字符以外字符的。最末尾的“.”一定不能掉,它表示一个句子结束。 //“:-”在prolog中表示“如果”的意思,我们使用它来定义规则。lovers(X,Y):-love(X,Y),lo…

charts引入icon图片_v-charts 踩坑之路

最近要做一个大屏 没有使用echarts 使用了更适合vue封装的v-charts组件库,第一次使用 期间踩了不少坑,记录下来和大家分享一下。废话不多说 开始搞起来!一、安装 引入什么的大家自行百度 百度一下,你就知道​www.baidu.com二、2.1…

今天星期一在家值班

只盼着不要出问题 转载于:https://www.cnblogs.com/bkchengzheng/p/6196193.html

高一学生计算机知识现状分析,关于高中信息技术课教学现状的思考

一、 当前信息技术教学现状的分析(一)课程开设的现状高中信息技术课已经开展好多年了,总的来说,越来越被教育部门重视了,从刚开始的仅仅要求学生认识计算机,到学习一些简单处理软件,到把信息技术整合成一门象样的…

魔兽争霸 地图编辑器 常用属性【原创】

物体单位 技能-英雄:选择英雄的技能文本-名字:英雄的名字状态-初始力量、敏捷、智力:初始三围状态-初始属性:初始英雄类别(力量、敏捷、智力)状态-每等级所加力量、敏捷、智力:每升一级增加三围…

pla3d打印材料密度_模具粉必看!总有一款粉末能解决您的问题-毅速3D打印研制...

金属3D打印最常见的形式是粉末床熔融。这类工艺使用热源(SLM工艺使用激光,EBM工艺使用电子束)逐点将粉末颗粒熔融在一起,逐层加工至物件完成。在金属3D打印过程中,可能存在很多设备操作者试图避免的问题,包…

魔兽争霸 地图编辑器 笔记

//高级——游戏平衡常数英雄最大XP取得范围:最大经验值英雄最大等级限制 //玩家属性——势力重新定义添加势力——我方共享单位控制、共享高级单位控制

【Networking】容器网络大观 SDN 资料汇总

SDNLAB技术分享(十五):容器网络大观SDNLAB君 • 16-06-17 •2957 人围观编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望通过SDNLAB…

七年级计算机室使用计划表,七年级信息技术教学工作计划

时间眨眼而过,又是一年工作计划的时刻啦!下面是出国留学网小编为大家整理的“七年级信息技术教学工作计划”,欢迎参阅。内容仅供参考,了解更多关于工作计划内容,请关注出国留学工作计划栏目。七年级信息技术教学工作计划【一】一、…

java 建立ssh隧道_SSH基础

SSH基本概念SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有…