- 需求如下:开发一个简易的搜索引擎(即提供查询关键字的服务)
- 程序思路及模型: python构建一个Http Server;提供用户输入的一个静态页面;用户提交请求后,把请求再转发到其他站点,最后把结果(动态页面)传给用户
- 下面是程序原型模型(使用python 2.7编写,没有使用第三方library/module),没有任何优化,主要演示Http Server构建过程,Html Parser使用,调用本地浏览器进行体验等。
-
#为方便测试,所有代码都编写于一个文件 #没有保存到本地数据库(sqllite) #没有递归下载所有数据 import os,subprocess import sys import SimpleHTTPServer import SocketServer import logging import cgi from HTMLParser import HTMLParser import urllib2,urllib htmlContent='''<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <style type="text/css"> .myform { COLOR: #ffffff; BACKGROUND-COLOR: skyblue; BORDER-RIGHT: rgb(0,0,0) 1px dashed; BORDER-TOP: rgb(0,0,0) 1px dotted; BORDER-LEFT: rgb(0,0,0) 1px dotted; BORDER-BOTTOM: rgb(0,0,0) 1px dotted } li a { display:block; } </style> </head> <body> <div class="myform"> <form action="/" method="post"> Search Keyword: <input type="text" name="keyword" value="UIC"><input type="submit" value="Submit"> </form> </div> <ul> search:result </ul> <p>The above is parts of result for searching.</p> </body> </html> ''' def openUrlInDefaultBrowser(url): if sys.platform=='win32': os.startfile(url) elif sys.platform=='darwin': subprocess.Popen(['open', url]) else: try: subprocess.Popen(['xdg-open', url]) except OSError: print 'Please open a browser on: '+url if len(sys.argv) > 2: PORT = int(sys.argv[2]) elif len(sys.argv) > 1: PORT = int(sys.argv[1]) else: PORT = 8899 class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): logging.warning("======= GET STARTED =======") logging.warning(self.headers) self.wfile.write(htmlContent.replace('search:result','')) def do_POST(self): logging.warning("======= POST STARTED =======") logging.warning(self.headers) form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) logging.warning("======= POST VALUES =======") for item in form.list: logging.warning(item) logging.warning("\n") q=form.getvalue("keyword") if q: p = MyHTMLParser() f = urllib2.urlopen('http://uic.edu.hk/en/component/search/?searchword=%s&searchphrase=all&Itemid=108' % (q)) html = f.read() p.feed(html) total = len(p.urls) item = 0 urls = [] while item < total: url = "<li><a href=\"%s%s\">%s</a></li>" % ("http://uic.edu.hk",p.urls[item].strip(),p.titles[item].strip()) urls.append(url) item += 1 p.close() self.wfile.write(htmlContent.replace('UIC',q).replace('search:result',''.join(urls))) else: self.wfile.write(htmlContent.replace('search:result','')) class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.recording = 0 self.findHref = 0 self.urls = [] self.titles = [] def handle_starttag(self, tag, attrs): if tag == 'dt': for name, value in attrs: if name == 'class' and value == 'result-title': print name, value self.recording = 1 self.findHref = 0 if tag == 'a' and self.recording == 1: for name, value in attrs: if name == 'href': print name,value self.urls.append(value) self.recording = 1 self.findHref = 1 def handle_endtag(self, tag): if tag == 'dt': self.recording -= 1 if tag == 'a' and self.findHref == 1: self.findHref -= 1 def handle_data(self, data): if self.findHref: self.titles.append(data) Handler = ServerHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "author:sunflowerbbs@gmail.com from UC Studio, Python http server version 1.0 (for testing purposes only)" openUrlInDefaultBrowser("http://%s:%d" % ("localhost", PORT)) httpd.serve_forever()
- 浏览: 235589 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (101)
- Practice (17)
- Model (15)
- Prototype (2)
- Integration (6)
- GWT (3)
- Android (16)
- Lab (6)
- Ubuntu (4)
- Data Structure(D,S) (1)
- 社会观察员 (1)
- python (14)
- redis (0)
- mysql (9)
- php (0)
- Data Structure(D (1)
- haproxy (2)
- Shell (5)
- Zabbix (1)
- CentOS (1)
- sqlplus (1)
- rlwrap (1)
- Oracle (2)
- schema (2)
- user (1)
- accredit (1)
- Delphi (2)
- nagios (1)
- nginx (0)
最新评论
-
白云飞:
兄弟能不能发一份完整的源码到我邮箱?luochengwei20 ...
【Python真的很强大】程序Log实时监控 -
myreligion:
nice job!
解决一个棘手的bug: java.lang.NoClassDefFoundError: android.os.AsyncTask -
yw9002:
你这个貌似提交的时候整个页面都会刷新。
AjaxAnyWhere+Struts的一个应用(demo/feature crew) -
fkpwolf:
这总结偏向于细节了,流水账
Android app项目和开发总结 -
crazybull:
期待详细总结~~~
Android app项目和开发总结
发表评论
-
【Python真的很强大】使用yield优雅抓取网页分页数据
2017-08-29 16:41 1777使用yield优雅抓取网页分页数据 在使用Python来抓 ... -
用 Python 编写干净、可测试、高质量的代码[转载]
2017-04-26 12:49 829用任何语言都可以写出 ... -
MySQL的XML接口-数据解析
2016-01-21 21:46 1161MySQL从5.1.5开 ... -
【Python真的很强大】多线程的使用
2015-12-13 10:47 1377需求: 我们需要监控客户端是否已经掉线, 采用的做法是客 ... -
【Python真的很强大】使用telnetlib编写nagios命令来监控远程主机cpu-load
2015-08-28 09:09 3165需求: 远程unix主机cpu load 有时 ... -
python 实现每天产生一个日志文件
2015-05-19 12:30 3094与java apache log4j的Consol ... -
【Python真的很强大】使用fabfile.py来自动化你的任务
2015-04-24 13:52 1467Fabric简介: 通过ssh登录远程主机,可以部署应用 ... -
【Python真的很强大】使用scrapy爬取百度贴吧-上海吧
2015-03-15 12:46 4725需求是这样的: 需要获取最近20天的贴吧的主题 ... -
【Python真的很强大】使用PIL合成图片
2014-10-13 14:03 3555目前有如下需求,想用python生成一些图文并茂的 ... -
xml + xslt => html => pdf
2014-03-05 18:02 1811继上一篇:使用java将xml格式化,本blog主 ... -
【Python真的很强大】md5sum in Python
2014-01-17 13:17 2304''' md5sum in Python ... -
使用java将xml格式化
2013-12-25 18:04 2128将生成的xml用ie浏览器打开,就可以见到漂亮的缩进的xm ... -
【Python真的很强大】程序Log实时监控
2013-12-10 16:45 7374需求构思: 在linux下常常需要查看程序的实时输出,我 ... -
使用py2exe打包MySQLdb程序为exe
2013-06-20 18:03 5473最近写了一个日志管理的脚本LocalLogHou ... -
在CentOS 安装 cx_Oracle
2013-02-22 15:55 3931以下是在CentOS安装 cx_Oracle的流程: ... -
haproxy使用总结
2012-10-17 17:19 1313DESCRIPTION HAProxy i ... -
解决mysql中的OperationalError: (2006, 'MySQL server has gone away')
2012-08-03 16:03 6996这两天在python中用MySQLdb module操作 ... -
集合数据比较
2012-07-31 12:17 1142数据比较的原型模型是两集合的操作(求交集,并集,补集),如下 ... -
利用事件冒泡(Event Bubbling )获取鼠标下的元素属性
2010-03-17 16:21 2080<html> <head> ... -
Generic Classes & Reflect
2010-02-26 10:05 1137abstract class TestGeneric1 < ...
相关推荐
总的来说,这个简易学生信息管理系统展示了Python在开发实用应用程序上的强大能力。通过学习和实践此类项目,开发者不仅可以深入理解Python语言,还能掌握数据库管理、GUI编程和文件操作等相关技术,为今后的软件...
【Python实现简易图书管理系统】 在IT领域,Python是一种流行的编程语言,因其简洁的语法和强大的功能而备受青睐。本项目是使用Python实现的一个简易图书管理系统,它具备基本的图书信息管理功能,包括添加、查询、...
本篇文章将详细解析一个基于Python3实现的简易人事管理系统,该系统利用Pycharm开发环境,并结合MYSQL数据库进行数据存储。 一、系统概述 这个简易人事管理系统旨在提供基础的人事管理功能,包括用户登录、员工信息...
Maya Python 简易教程 Maya Python 是一种基于 Python 语言的 Maya 脚本语言,用于自动化 Maya 的操作和开发插件。下面是 Maya Python 简易教程的知识点: 1. Maya Python 简介 Maya Python 是用 Python 语言包裹...
而PyQt和wxPython则功能更强大,外观更美观,适合开发复杂的商业应用。 2. **Tkinter库介绍**:Tkinter是Python的默认GUI库,它基于Tk库。通过Tkinter,我们可以创建各种控件,如按钮、文本框、标签等,并定义它们...
《基于Django和Python的Web开发》这一标题揭示了文档将会围绕Django和Python这两种技术进行深入探讨,特别关注它们在Web开发领域的应用。文档将会基于具体案例(如简易博客系统的创建)来展示如何使用这两项技术构建...
【Python PyGame实现简易画板】\n\nPython作为一个强大的编程语言,因其简洁易懂的语法和丰富的库支持,常被用于开发各种类型的应用程序,包括游戏和图形用户界面(GUI)。PyGame是Python的一个库,它为创建游戏和...
Python 实用工具,Python 和 PyQt5 开发框架,实现简易浏览器 本文主要介绍了使用 Python 和 PyQt5 开发框架实现简易浏览器的方法。该浏览器具有基本的浏览功能,包括显示网页、设置导航栏、地址栏、标签页等。下面...
在本文中,我们将深入探讨如何使用Python编程语言设计和实现一个简易的物联网(IoT)系统。Python因其简洁明了的语法和丰富的库支持而成为物联网应用开发的热门选择。以下是一些关键知识点: 1. **Python编程基础**...
在本项目中,"数字图像处理Python制作简易软件系统"是一个使用Python编程语言实现的简单图像处理应用程序。这个系统基于PyQt图形用户界面(GUI)框架进行开发,为用户提供了一个直观且易于操作的界面来执行基本的...
【Python简易聊天软件】是一个基于Python编程语言实现的初级聊天应用程序。这个项目旨在提供一个基础的聊天室功能,用户可以通过它进行简单的文本交流。虽然由于其对开发环境的高度依赖,导致该软件在非特定环境下...
在本项目中,"Python简易飞机大战游戏"是一款利用Python编程语言和Pygame库开发的小型游戏。Pygame是Python中一个广泛使用的模块,专为创建2D游戏和多媒体应用程序而设计。它提供了丰富的功能,包括图形绘制、事件...
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
总的来说,"Python简易画图软件"是一个很好的实践项目,它将理论与实践相结合,帮助初学者在愉快的实践中掌握Python编程和Pygame库的使用。通过完成这个项目,学习者不仅可以提升编程技能,还能培养解决问题和创新...
【基于PyQt的自制简易浏览器】是一个Python编程项目,它利用了PyQt这一强大的图形用户界面库来构建一个简易的Web浏览器。PyQt是Python语言中的一个模块,它提供了对Qt库的接口,Qt库是C++开发的,广泛用于创建跨平台...
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
在本项目中,我们讨论的是一个使用Python全栈开发的简易博客论坛,其核心框架是Django。Django是一个高效且强大的Web开发框架,它遵循模型-视图-控制器(MVC)的设计模式,但稍有不同,Django将其称为模型-视图-模板...
在本项目中,"用Python编了一个简易高尔夫游戏",我们可以深入探讨Python编程在游戏开发中的应用,以及如何创建一个基础的小游戏。Python语言以其简洁明了的语法和丰富的库资源,成为初学者和专业开发者青睐的编程...
【Maya Python简易教程】 Maya Python教程是一个适合初学者的指南,旨在让学习者快速掌握在Maya中使用Python语言的基本技能。教程注重实践,通过简单易懂的例程来展示Python在Maya中的实际应用,尤其适合没有编程...
Python是一种强大的编程语言,尤其在数据处理和科学计算领域中广泛应用。在图像处理方面,Python提供了许多库,如PIL(Python Imaging Library)和OpenCV,使得开发者能够进行复杂的图像操作,包括一种特殊的技术...