##language:zh #pragma section-numbers off ##含有章节索引导航的 ZPyUG 文章通用模板 <> ## 默许导航,请保留 <> = 像CSS选择器一样使用BeautifulSoup = ##startInc {{{ jeff jie reply-to zpug@googlegroups.com to python-cn@googlegroups.com, zpug@googlegroups.com date Tue, Jun 16, 2009 at 11:04 }}} * subject [ZPyUG:1030] [[http://groups.google.com/group/python-cn/browse_thread/thread/c77b833c0f21eb3b|像CSS选择器一样使用BeautifulSoup - python-cn`CPyUG`华蟒用户组(中文Py用户组) | Google 网上论坛]] 共享一些代码片段,一直说要共享,一搁就大半年。。哎。。 * 较早前写扒虫多,虽然BeautifulSoup很好用,但厌倦每次都要手动去编写复杂的Dom元素定位语句,突然想,能不能像CSS选择器一样,只给一个表达式就返回我想要的东西?后来在网上找了下没找着,想了想工作量也不大就自己实现了一个,目前支持ID,Class,标签及属性选择器、支持 space、 >、 + 操作符,基本上已满足大部份定位需求。 * 代码见附件的BTSelector.py,另附UnitTest。 * 分享在: http://code.google.com/p/zqlib/source/browse/tangle/BTSelector/ 常见使用方式是: * 注意,本脚本依赖于BeautifulSoup,所以,使用之前请确保你已经安装了。 {{{#!python from BTSelector import findAll soup = BeautifulSoup(htmlContent) nodes = findAll('div.navigator #notice',soup) # findAll返回的是符合选择条件的Dom 对象列表,实际上是BeautifulSoup的标签或字符类。 }}} 除了使用findAll函数,还可以直接使用findById,findByTag等函数,等有兴趣的同学看源代码来发现了。 == 用testCase作为使用示例: == 一、上一个复杂一点的用例: {{{#!python def testMixSelection(self): target = "#header > div#name > a.highlight" html = '''
fk
''' soup = BeautifulSoup(html) ret = findAll(target,soup) self.assertEqual(2,len(ret)) }}} 二、再上一个使用位置操作符的用例: {{{#!python def testPosition(self): target = "h2 + ul > li > a" html = '''

title

''' soup = BeautifulSoup(html) ret = findAll(target,soup) self.assertEqual(3,len(ret)) }}} 更多的见附件的Unittest。里面没太多技术含量的东西,但希望大家喜欢。 == pyquery == {{{ 金浩 reply-to python-cn@googlegroups.com to python-cn@googlegroups.com date Tue, Jun 16, 2009 at 11:10 subject [CPyUG:89577] Re: 像CSS选择器一样使用BeautifulSoup }}} 其实,这个东西类似应该已经有了。比如pyquery http://pyquery.org/ 另外听很多人说 BeautifulSoup 效率非常差。 = GAE定期任务实操 = {{{ mutou majia reply-to python-cn@googlegroups.com to python-cn@googlegroups.com date Tue, Jun 16, 2009 at 16:48 subject [CPyUG:89635] 请问我的Google appegine 的Cron任务怎么做不正常呢? }}} == 问题 == 自己手动打开那个url一切正常, 但cron自己行动这个url时, 总不正常。 * 比如在这个corn Url里,我向数据库中写条记录, 手动输入url时,一切正常, Cron自己运行时却不行, * Google的控制板里,Cron Jobs总显示: `On time Failed。` == fixed == 找到原因了, 把url的处理函数不要用 {{{ (r'^tasks/', include('tasks.views')), 而要用 (r'^tasks/check', tasks.views.task_check), 才行。。。。 }}} 找的好辛苦。。。。 一周了,不知道问题在哪。。。。 * 至今GAE的Django支持性还是差了点。。。。 不过还得感谢Google啊, 除他还无人提供实验田吧? ##endInc ---- '''反馈'''