python web编程-web客户端编程

web应用也遵循客户服务器架构

浏览器就是一个基本的web客户端,她实现两个基本功能,一个是从web服务器下载文件,另一个是渲染文件

同浏览器具有类似功能以实现简单的web客户端的模块式urllib以及urllib2(可以打开需要登录的网页)等模块

另外还有一些负载的web客户端,它不仅下载web文件,还执行其它复杂的任务,一个典型的例子就是爬虫

python实现爬虫也有一些框架模块:如Scrapy

使用python创建一个简单web客户端

你要弄清楚浏览器只是web客户端的一种,而且功能有限,任何通过web的请求的应用程序都是web客户端

比如curl以及python的urllib

为什么是urllib呢而不是httplib呢?往下阅读

什么是URL???构成很重要

URL用来在Web 上定位一个文档,或者调用一个CGI 程序来为你的客户端产生一个文档。

CGI产生文档就是像一些web框架吧,特别是python的

web客户端其实也算是文件传输,最为直接方式就是直接使用url来定位和获得文件了,其实大部分客户端都是靠这个

所以应该首先了解一下url的构成

http://zh.wikipedia.org/zh/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E5%AE%9A%E4%BD%8D%E7%AC%A6

python的URL模块介绍:urllib及urlparse

Python 支持两种不同的模块,分别以不同的功能和兼容性来处理URL。一种是urlparse,一种

是urllib。

其中urlparse就是用来进行url解析与合成的。利用它你也可以学习url的构成哦,关于它的用法你可以help一下

urllib是一个高层次的模块,urllib 模块提供了所有你需要的功能,除非你计划写一个更加低层的网络客户端。urllib 提供

了了一个高级的Web 交流库,支持Web 协议,HTTP, FTP 和Gopher 协议,同时也支持对本地文件的

访问。urllib 模块的特殊功能是利用上述协议下载数据(从因特网、局域网、主机上下载)。使用这

个模块可以避免使用httplib, ftplib 和gopherlib 这些模块,除非你想用更低层的功能

urllib的主要功能就是从url来下载文件,想要了解这个模块的功能可以从下面几个函数入手

urlopen()

urllib.urlretrieve()

urllib.quote() and urllib.quote_plus()

urllib.unquote() 和 urllib.unquote_plus()

urllib.urlencode()

urllib2

如果你打算访问更加复杂的URL 或者想要处理更复杂的情况如基于数字的权限验证,重定位,

coockie 等问题,我们建议你使用urllib2 模块

这对于登陆来抓取数据是特别有用的

高级web客户端

浏览器实现的其实是一个简单的web客户端,基本的web客户端从服务器下载文件,urllib以及urllib2以及上面介绍的这些模块就是实现类似的功能

那么高级的web客户端就不只是下载那么简单

高级Web 客户端的一个例子就是网络爬虫(aka 蜘蛛和机器人)。这些程序可以基于不同目的在

因特网上探索和下载页面,其中包括:

  1. 为 Google 和Yahoo 这类大型的搜索引擎建索引
  2. 脱机浏览—将文档下载到本地,重新设定超链接,为本地浏览器创建镜像。(这个需求就是通常所说的下载整个在线的帮助文档)
  3. 下载并保存历史记录或框架
  4. Web 页的缓存,节省再次访问Web 站点的下载时间。

这里给出一个爬虫的实现

  1 #!/usr/bin/env python
  2
  3 from sys import argv
  4 from os import makedirs, unlink, sep
  5 from os.path import isdir, exists, dirname, splitext
  6 from string import replace, find, lower
  7 from htmllib import HTMLParser
  8 from urllib import urlretrieve
  9 from urlparse import urlparse, urljoin
 10 from formatter import DumbWriter, AbstractFormatter
 11 from cStringIO import StringIO
 12
 13 class Retriever(object):    # download Web pages
 14
 15     def __init__(self, url):
 16         self.url = url
 17         self.file = self.filename(url)
 18
 19     def filename(self, url, deffile=‘index.htm‘):
 20         parsedurl = urlparse(url, ‘http:‘, 0)  # parse path
 21         path = parsedurl[1] + parsedurl[2]
 22         ext = splitext(path)
 23         if ext[1] == ‘‘:
 24             if path[-1] == ‘/‘:
 25                 path += deffile
 26             else:
 27                 path += ‘/‘ + deffile
 28         ldir = dirname(path)    # local directory
 29     if sep != ‘/‘:        # os-indep. path separator
 30         ldir = replace(ldir, ‘,‘, sep)
 31         if not isdir(ldir):      # create archive dir if nec.
 32             if exists(ldir): unlink(ldir)
 33             makedirs(ldir)
 34         return path
 35
 36     def download(self):        # download Web page
 37         try:
 38             retval = urllib.urlretrieve(self.url, self.file)
 39         except IOError:
 40             retval = (‘*** ERROR: invalid URL "%s"‘ %  41                 self.url, )
 42         return retval
 43
 44     def parseAndGetLinks(self):    # pars HTML, save links
 45         self.parser = HTMLParser(AbstractFormatter(  46             DumbWriter(StringIO())))
 47         self.parser.feed(open(self.file).read())
 48         self.parser.close()
 49         return self.parse.anchorlist
 50
 51 class Crawler(object):        # manage entire crawling process
 52
 53     count = 0            # static downloaded page counter
 54
 55     def __init__(self, url):
 56         self.q = [url]
 57         self.seen = []
 58         self.dom = urlparse(url)[1]
 59
 60     def getPage(self, url):
 61         r = Retriever(url)
 62         retval = r.download()
 63         if retval[0] == ‘*‘:     # error situation, do not parse
 64             print retval, ‘... skipping parse‘
 65             return
 66         Crawler.count = Crawler.count + 1
 67         print ‘\n(‘, Crawler.count, ‘)‘
 68         print ‘URL:‘, url
 69         print ‘FILE:‘, retval[0]
 70         self.seen.append(url)
 71
 72         links = r.parseAndGetLinks()  # get and process links
 73         for eachLink in links:
 74             if eachLink[:4] != ‘http‘ and  75                     find(eachLink, ‘://‘) == -1:
 76                 eachLink = urljoin(url, eachLink)
 77             print ‘* ‘, eachLink,
 78
 79             if find(lower(eachLink), ‘mailto:‘) != -1:
 80                 print ‘... discarded, mailto link‘
 81                 continue
 82
 83             if eachLink not in self.seen:
 84                 if find(eachLink, self.dom) == -1:
 85                     print ‘... discarded, not in domain‘
 86                 else:
 87                     if eachLink not in self.q:
 88                         self.q.append(eachLink)
 89                         print ‘... new, added to Q‘
 90                     else:
 91                         print ‘... discarded, already in Q‘
 92             else:
 93                     print ‘... discarded, already processed‘
 94
 95     def go(self):                # process links in queue
 96         while self.q:
 97             url = self.q.pop()
 98             self.getPage(url)
 99
100 def main():
101     if len(argv) > 1:
102         url = argv[1]
103     else:
104         try:
105             url = raw_input(‘Enter starting URL: ‘)
106         except (KeyboardInterrupt, EOFError):
107             url = ‘‘
108
109     if not url: return
110     robot = Crawler(url)
111     robot.go()
112
113 if __name__ == ‘__main__‘:
114     main()

实际上这里也有一些爬虫的库,不多介绍

时间: 2024-10-14 03:48:17

python web编程-web客户端编程的相关文章

python web编程-CGI帮助web服务器处理客户端编程

这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里的静态页面,但是要怎么做到洞察不同用户同的输入?比如说表单提交等来产生不同的返回结果呢 一个简单的思路是web服务器把这些请求提交给另外一个程序,它接受用户输入然后处理,根据输入生成一个静态的html文件交给web服务器 复杂上面这样的流程程序就是CGI,是单独出来的 创建HTML 的CGI 应用程

Python 四大主流 Web 编程框架

Python 四大主流 Web 编程框架 目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django.Tornado.Flask.Twisted. 网络框架及MVC架构 所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议.线程.进程等方面.这样能大大提高开发者的工作效率

Android开发之使用Web Service进行网络编程

使用Web Service进行网络编程 Android应用通常都是执行在手机平台上.手机系统的硬件资源是有限的,无论是存储能力还是计算能力都有限.在Android系统上开发.执行一些单用户.小型应用是可能的, 但对于须要进行大量的数据处理.复杂计算的应用.还是仅仅能部署在远程server上,Android应用将仅仅是充当这些应用的client. 为了让Android应用与远程server之间进行交互,能够借助子Java的RMI技术,但这要求远程server程序必须採用Java实现:也能够借助于C

Atitit.web三大编程模型 Web Page Web Forms 和 MVC

Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. Web编程模型?在这里我们定义Web编程模型为如何编写代码生成html返回给最终用户的方法. 它包括两部分,一个是如何编写Web应用程序的规范,另一个则是实现这一规范的Web编程框架, 3. Web Pages 是最简单的 ASP.NET 网页开发编程模型.它提供了一种简单的方法将 HTML.CSS

WEB前端研发工程师编程能力成长之路(1)(转)

WEB前端研发工程师编程能力成长之路(1) [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: 如果你是四五年的前端开发高手,没有难题能难得住你的寂寞高手,来看这篇文章吧: WEB前端研发工程师,在国内是一个朝阳职业,自07-08年正式有这个职业以来,也不过三四年的时间.这个领域没有学校的正规教育,没有行内成体系的理论指引,几乎所有从事这个职业的人都是靠自己自学成才.自学成才,一条艰辛的坎坷路,

html5之Web Worker -- js多线程编程

什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript和UI页面会共用一个线程,在HTML页面中执行js脚本时,页面的状态是不可响应的,直到脚本已完成.而这段代码可以交给Web Worker在后台运行,那么页面在Javascript运行期间依然可以响应用户操作.后台会启动一个worker线程来执行这段代码,用户可以创建多个worker线程. 有两种 W

python进阶之Socket 网络编程

 一:网络编程介绍   自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的通信. 举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上. 由于你的电脑上可能不止浏览器,还有QQ.Skype.Dropbox.邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更

python 网络编程和并发编程题

1.答: 应用层与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层.但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层.示例:TELNET,HTTP,FTP,NFS,SMTP等.表示层这一层的主要功能是定义数据格式及加密.例如,FTP允许你选择以二进制或ASCII格式传输.如果选择二进制,那么发送方和接收方不改变文件的内容.如果选择ASCII格式,发送方将

为何Python要从Web开始,才不会半途而废?【附整套web自学教程】

Python语言学习起来相对容易,这不可否认.但对于缺乏编程基础的人来说,Python依然很难,这也是事实. 学Python要从web开始?为什么? 一.因为能满足人的成就感 对于初学者,Python存在着较大的学习难度,这个难度不是来自技术,而是来自自己,学习的过程总是枯燥的,但如果能结合一个可视化的结果来学习,就会给自己带来成就感,也就有了学习动力. 二.因为能降低人的挫败感 用Python做web开发是比较简单的,有关于Python做web开发的教程网上也是很多,所以在web开发中遇到的大

2、基于Python下的web框架之中最具有代表性的一个——Django

是,许多成功的网站和app都基于Django(Uber.Instagram),开放源代码,遵从BSD版权,采用MVC的软件设计模式,及模型M,视图V和控制器C. (BSD:伯克利软件发行版,开源许可协议,保护原始作者的身份,至少得到身份认可,还可以防止其它人将产品据为己有) 如何使用django orm批量创建数据? def bulk_create(self, objs, batch_size=None):     # 批量插入     # batch_size表示一次插入的个数     obj