- 需求如下:开发一个简易的搜索引擎(即提供查询关键字的服务)
- 程序思路及模型: 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()
- 浏览: 230989 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 1742使用yield优雅抓取网页分页数据 在使用Python来抓 ... -
用 Python 编写干净、可测试、高质量的代码[转载]
2017-04-26 12:49 785用任何语言都可以写出 ... -
MySQL的XML接口-数据解析
2016-01-21 21:46 1091MySQL从5.1.5开 ... -
【Python真的很强大】多线程的使用
2015-12-13 10:47 1338需求: 我们需要监控客户端是否已经掉线, 采用的做法是客 ... -
【Python真的很强大】使用telnetlib编写nagios命令来监控远程主机cpu-load
2015-08-28 09:09 3107需求: 远程unix主机cpu load 有时 ... -
python 实现每天产生一个日志文件
2015-05-19 12:30 3065与java apache log4j的Consol ... -
【Python真的很强大】使用fabfile.py来自动化你的任务
2015-04-24 13:52 1437Fabric简介: 通过ssh登录远程主机,可以部署应用 ... -
【Python真的很强大】使用scrapy爬取百度贴吧-上海吧
2015-03-15 12:46 4645需求是这样的: 需要获取最近20天的贴吧的主题 ... -
【Python真的很强大】使用PIL合成图片
2014-10-13 14:03 3520目前有如下需求,想用python生成一些图文并茂的 ... -
xml + xslt => html => pdf
2014-03-05 18:02 1761继上一篇:使用java将xml格式化,本blog主 ... -
【Python真的很强大】md5sum in Python
2014-01-17 13:17 2257''' md5sum in Python ... -
使用java将xml格式化
2013-12-25 18:04 2073将生成的xml用ie浏览器打开,就可以见到漂亮的缩进的xm ... -
【Python真的很强大】程序Log实时监控
2013-12-10 16:45 7315需求构思: 在linux下常常需要查看程序的实时输出,我 ... -
使用py2exe打包MySQLdb程序为exe
2013-06-20 18:03 5422最近写了一个日志管理的脚本LocalLogHou ... -
在CentOS 安装 cx_Oracle
2013-02-22 15:55 3851以下是在CentOS安装 cx_Oracle的流程: ... -
haproxy使用总结
2012-10-17 17:19 1271DESCRIPTION HAProxy i ... -
解决mysql中的OperationalError: (2006, 'MySQL server has gone away')
2012-08-03 16:03 6954这两天在python中用MySQLdb module操作 ... -
集合数据比较
2012-07-31 12:17 1097数据比较的原型模型是两集合的操作(求交集,并集,补集),如下 ... -
利用事件冒泡(Event Bubbling )获取鼠标下的元素属性
2010-03-17 16:21 2024<html> <head> ... -
Generic Classes & Reflect
2010-02-26 10:05 1096abstract class TestGeneric1 < ...
相关推荐
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
综上所述,Python开发的简易SNMP管理站工具是一个实用的网络管理解决方案,尤其适合于需要快速部署且成本敏感的环境。通过利用PySNMP库的强大功能,开发者可以轻松地创建出符合自身需求的网络管理工具。
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
同时,Python拥有丰富的开源库和框架,如Django、Flask、OpenCV等,为项目开发提供了强大的支持。 这些项目的开发旨在为用户提供便捷、智能的服务和功能。Python语言具备广泛的应用领域,从机器学习、自然语言处理...
一个清晰,简洁,简单但功能强大的API,用于深入学习
还支持代码折叠、重构以及多选等特色化操作,既增加交互式python的开发速度,同时在原有的开发环境下更能体现出软件内置编辑器的强大功能,在良好适应远程开发的基础上也能更加展现出软件简易的操作形式和编码风格。
Python是一种易于学习且功能强大的编程语言,非常适合初学者入门。无论你是希望了解数据科学、网页开发,还是想进行自动化操作,Python都是一个优秀的选择。以下是一份简易的Python入门教程。 一、安装Python 首先...
项目概述:本项目是一款基于Python的在线交互教学平台,采用...简而言之,此平台通过现代化的Web技术栈,将Flask的简易性与CodeMirror的强大代码编辑功能相结合,打造出一个高效、直观的Python在线学习和教学环境。
Python开发的简易图片服务器,支持分布式集群(需Nginx配合),支持图片上传/下载/删除/鉴权,支持图片同步备份(需Rsync配合),短小精悍,功能强大。
假设互联网是一张很大的蜘蛛网,每个页面之间都通过超链接这根线相互连接,那么我们的爬虫小程序就能够通过这些线不断的搜寻到新的网页。Python作为一种代表简单主义思想的解释型、面向对象、功能强大的高级编程语言...
python Flask Flask是轻量级的网页伺服器,但一样有完整强大的功能Flask是可以遵循自已的需求,而通过pip套件管理程序来扩展功能Flask提供网络服务器核心的基本功能,其余的由扩展套件来增加功能Flask具有三个核心...
Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区...
Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区...
D 语言既有 C 语言的强大威力,又有 Python 和 Ruby 的开发效率。它是一种集垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内...
6. **集成能力**:MATLAB可以与其他编程语言(如C、C++、Java、Python等)及外部应用程序进行数据交换和联合开发,也可以调用硬件接口进行实时实验和控制。 7. **交互式工作空间**:用户可以在命令窗口中直接输入...
eDSP(简易数字信号处理)是一种用现代 C++ 编写的数字信号处理框架,它实现了数字信号处理、音频工程和电信系统中经常使用的一些常见功能和算法。 它旨在提供高效和简化的基础计算,同时具有类似于MATLAB等另一种...
SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。...这是很宽松的法律,你可以用如此强大的多媒体库完全合法的免费开发商业游戏。