首页  »  编程  »  像CSS选择器一样用BeautifulSoup

像CSS选择器一样用BeautifulSoup

较早前写扒虫多,虽然BeautifulSoup很 好用,但厌倦每次都要手动去编写复杂的Dom元素定位语句,突然想,能不能像CSS选择器一样,只给一个表达式就返回我想要的东西?后来在网上找了下没找 着,想了想工作量也不大就自己实现了一个,目前支持ID,Class,标签及属性选择器、支持 space、 >、 + 操作符,基本上已满足大部份定位需求。

代码见附件里的BTSelector.py,另附UnitTest。
常见使用方式是:
注意,本脚本依赖于BeautifulSoup,所以,使用之前请确保你已经安装了。

python 代码
 
  1. from BTSelector import findAll  
  2. soup = BeautifulSoup(htmlContent)  
  3. nodes = findAll('div.navigator #notice',soup)  
  4. # findAll返回的是符合选择条件的Dom 对象列表,实际上是BeautifulSoup的标签或字符类。  

用testCase作为使用示例:
一、上一个复杂一点的用例:

python 代码
 
  1. def testMixSelection(self):  
  2. target = "#header > div#name > a.highlight"  
  3. html = ''' 
  4. <div id="header"> 
  5. <div id="name"> 
  6. <a>test</a> 
  7. <a>right</a> 
  8. <a>ok</a> 
  9. </div> 
  10. <div id="your"> 
  11. </div> 
  12. </div> 
  13. <div id="body">fk 
  14. </div> 
  15. '''  
  16. soup = BeautifulSoup(html)  
  17. ret = findAll(target,soup)  
  18. self.assertEqual(2,len(ret))  

二、再上一个使用位置操作符的用例:

python 代码
 
  1. def testPosition(self):  
  2. target = "h2 + ul > li > a"  
  3. html = ''' 
  4. <h2>title</h2> 
  5. <ul> 
  6. <li><a href="#">nothing</a></li> 
  7. <li><a href="#">ok</a></li> 
  8. <li><a href="#">come on!</a></li> 
  9. </ul> 
  10. '''  
  11. soup = BeautifulSoup(html)  
  12. ret = findAll(target,soup)  
  13. self.assertEqual(3,len(ret))  

更多的见附件的Unittest。希望大家喜欢。



<EOF>

评论(0条)


comment
留下您的高见



(可不填)



 = 


Meta

关于本博客...

关于黑莓手机、apple、twitter、互联网、web2.0以及生活的碎言碎语。请在twitter上 follow我,欢迎同好者talk to me bbmyth AT gmail.com。博客Hosting在 webfaction。

赞助商链接

我看我听我读

最新评论

标签

python 空间 开发 计划 年假 工作 诗歌 音乐 西片 恐怖 惊变 django mysql rss 文艺片 太阳 彩色 电影 apache 部署 factcgi lighttpd javascript editor MYMeditor sql 日志 java hibernate orm 数据库 英伦 摇滚 原创 中间件 朋友 erlang 并发 函数式编程 旅游 云南 丽江 发呆 学习 编程 技术 lucene 全文搜索 中文分词 乐队 模板 分页 成功 google pagerank 中文 更新 个性化 秋天 互联网 web ext json ajax 事业 职业 读书 开源 香港 澳门 忧郁 冬天 compass dvd 广州 地下 暴力 美学 声音玩具 独立 备份 数据 琐事 博客 生活 体验 卖唱 接口 设计模式 图表 wiki moin 遇窃 air ria 需求 设计 信息 健康 感悟 人生 真诚 life jquery 杭州 灾害 2008 中国 灾难 哀悼日 jmesa grails flex flash 捐赠 scrum 软件过程 快速开发 plone cms nuexo zope 左小诅咒 demo prototpye AMF actionscript 汉诺塔 算法 递归 结婚 感情 opensource 网络 beautifulSoup 管理 大理 香格里拉 休假 鼻炎 许巍 感性 2009 随想 cpug 聚会 出差 北京 api 创业 商城 blackberry 手机 TD 交流 处事 为人 房子 经济 手机仿真 在线服务 嵌入式 海鲜 p2p easymule apple 技巧 thing gtd task gfw vpn 穿墙 代理 软件管理 翻译 mac 英语 caffeine 休眠 搬家 主机 prism firefox mozilla 免费 php codeigniter url blogspot mindmap mindnode htmlparse easyurl 产品 黑莓 rim 试手机 豆瓣 twitter 微博 杂记 时空 亲人 dabr webfaction host 快速查看 safari appale 桌面 snow 升级 leopard finder 权限 glims python主机 合租 ruby主机 快捷键 itunes 时间管理 原型 画图 招聘 hosting 写作 软件 家庭 广州技术沙龙 postgres 云计算 fuckgfw 内容审检 谷歌 chrome linux odbc database freetds R 统计 书签 浏览器 bookmark tinymce 文件管理 分享 忙碌 旅行 马来西亚 图维导图 freemind 工具 pinax develope shell dropbox barcamp

日志分类

友情链接

博客归档

PowerBy