zope 是一个 application server,提供的“功能”和 django 类似,但是比 django 早很多。
比较有意思的是它使用 module 的路径对应 web url 的路径,并以此复用不同的对象。但是 zope2 对 RDBMS 支持不是太好,也有很多实现并不是特别的“python”,这导致后来 django 的崛起。但是 zope3 希望能够修正以往 zope2 的问题,可以参看这个文档。
暂且没有什么特别的需要,django 用起来也挺顺手,就此留个记录吧。
Pythonist
Friday, April 6, 2012
Sunday, March 11, 2012
scrapy
很不错的 crawler。嘻嘻,下面是来自 tutorial 的例子。先是 spider 下面的 dmz_spider.py
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import DmozItem
class DmozSpider (BaseSpider):
name = 'dmoz'
allowed_domains = ['dmoz.org']
start_urls = [
'http://www.dmoz.org/Computers/Programming/Languages/Python/Books/',
'http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/',
]
def parse (self, response):
hxs = HtmlXPathSelector (response)
sites = hxs.select ('//ul/li')
items = list ()
for site in sites:
title = site.select ('a/text()').extract ()
link = site.select ('a/@href').extract ()
desc = site.select ('text()').extract ()
if len (title) > 0:
title = title [0]
else:
continue
if len (link) > 0:
link = link [0]
else:
continue
if len (desc) > 0:
desc = desc[0].strip()
item = DmozItem ()
item ['title'] = title
item ['link'] = link
item ['desc'] = desc
items.append (item)
return items
然后是 items.py
from scrapy.item import Item, Field
class DmozItem(Item):
title = Field ()
link = Field ()
desc = Field ()
最后是修改过的 settings.py
BOT_NAME = 'tutorial' BOT_VERSION = '1.0' SPIDER_MODULES = ['tutorial.spiders'] NEWSPIDER_MODULE = 'tutorial.spiders' DEFAULT_ITEM_CLASS = 'tutorial.items.DmozItem' USER_AGENT = '%s/%s' % (BOT_NAME, BOT_VERSION)在 0.14 下运行可以,0.13 就挂了... 可以用 scrapy crawl -o items.json -t json 获得需要的 json 输出文件。
Thursday, August 11, 2011
几个 python 的安装工具
比较常见的是 setuptools,这里面包含了一个 easy_install 的脚本,可以直接 easy_install PackageName 装上需要的包,多数情况下安装的包放在 [python/site-packages] 里面,额外创建一个 easy-install.pth 文件,这个文件记录了安装的 python 包的名字,一般通过修改该文件,删除安装的 egg 文件/目录就行了。比较有用的选项是 -m 和 -Z,前者可以要求安装后不写 easy-install.pth,这样可以方便卸载,后者要求将 .egg 文件解压,这样不必每个用户使用的时候必须通过一个临时目录解开才能使用。
比 setuptools 高级一点的就是 pip,pip 支持搜索和卸载,比如可以 pip install django,然后pip uninstall django,或者 pip search django。
另外一个工具 virtualenv 的作用是创建完全独立的 python 环境,这样就能避免和系统使用的 python 版本不同、使用的 package 不能共存等等问题,这个适合出现了上述问题的用户,多数情况不需要完全独立的 python 环境。
比 setuptools 高级一点的就是 pip,pip 支持搜索和卸载,比如可以 pip install django,然后pip uninstall django,或者 pip search django。
另外一个工具 virtualenv 的作用是创建完全独立的 python 环境,这样就能避免和系统使用的 python 版本不同、使用的 package 不能共存等等问题,这个适合出现了上述问题的用户,多数情况不需要完全独立的 python 环境。
Tuesday, July 26, 2011
一段神奇的 python
代码来源似乎是一个俄国人的 blogger:
import os
from subprocess import Popen
pdfs = []
for i in xrange(1, 20):
p = Popen(['htmldoc', '--webpage', '-f', '%d.pdf' % i,
'http://www.djangobook.com/en/2.0/chapter%02d/' % i])
p.wait()
if os.path.exists('%d.pdf' % i):
pdfs.append('%d.pdf' % i)
if len(pdfs) > 0:
cmds = ['pdftk']
cmds.extend(pdfs)
cmds.extend(['cat', 'output', 'all.pdf'])
p = Popen(cmds)
p.wait()
其实 code 很简单,开了 20 个进程使用 htmldoc 将 html 转换成为 pdf,然后使用 pdftk 将几个 pdf 文件合并在一起。
几个 http 服务器
python 提供了几个 http 的服务器实现,一个是 BaseHTTPServer,然后有加强版的 SimpleHTTPServer 和 CGIHTTPServer 这么几个。我们往往可以在命令行上通过
python 另外有一个 django 可以实现一个比较复杂的 HTTP 服务器。后面稍微研究下。
$ python -m SimpleHTTPServer 8000在本地开启一个 http 的服务器。这可以方便调试简单的 HTML 页面。通过 CGI 甚至可以调试复杂一点的 AJAX。
python 另外有一个 django 可以实现一个比较复杂的 HTTP 服务器。后面稍微研究下。
Tuesday, July 5, 2011
python 的 reflection
这里仅仅列几个重要的用法。通过 dir 获得成员和成员函数,通过 callable 判断是否成员函数:
通过将对象的方法放在字符串里面就可以把一些行为 encode 在文件中。
def info(a):
for m in dir(a):
if callable(getattr(a, m)):
print m + ' is member function'
else:
print m + ' is a member'因此将文本转换成为代码一般依靠 getattr。另外可以通过 types 中的 FunctionType 判断是否为函数。通过将对象的方法放在字符串里面就可以把一些行为 encode 在文件中。
urllib + os 实现代理访问
import os import urllib os.environ["all_proxy"] = default_proxy + ':' + str(default_proxy_port) data = urllib.urlopen( url ).read()这里的 all_proxy 可以换成 http_proxy、ftp_proxy,all_proxy 是 SOCKS 代理。
通过 urllib 可以直接打开 http/ftp 等链接,并依照环境变量设置代理,非常方便。
Subscribe to:
Posts (Atom)