设为首页 收藏本站
查看: 869|回复: 0

[经验分享] Python 插件杂谈 (4)

[复制链接]

尚未签到

发表于 2015-4-27 12:41:53 | 显示全部楼层 |阅读模式
  嗯哼,Meego中文核心站-- 米趣网 又发新博文啦。
    前面向大家介绍了 PyQuery    ,下面转而介绍一下 BeautifulSoup   , Beautiful Soup 是 Python 内置的网页分析工具,名字叫美丽的蝴蝶。呵呵,某些时候确如美丽蝴蝶一样。
    先来段介绍:
    Beautiful Soup 是一个 Python HTML/XML 处理器,设计用来快速地转换网页抓取。以下的特性支撑着 Beautiful Soup:   

  • Beautiful Soup 不会选择 即使你给他一个损坏的标签。 他产生一个转换DOM树,尽可能和你原文档内容含义一致 。这种措施通常能够你搜集数据的需求。
  • Beautiful Soup 提供一些简单的方法以及类Python语法 来查找、查找、修改一颗转换树:一个工具集帮助你解析一棵树并释出你需要的内容。你不需要为每一个应用创建自己的解析工具。
  • Beautiful Soup 自动将送进来的文档转换为 Unicode 编码 而且在输出的时候转换为 UTF-8,。 除非这个文档没有指定编码方式或者Beautiful Soup 没能自动检测编码,你需要手动指定编码方式,否则你不需要考虑编码的问题。
  Beautiful Soup 转换任何你给他的内容,然后为你做那些转换的事情。你可以命令他 “找出所有的链接", 或者 "找出所有 class 是 externalLink 的链接" , 再或者是 "找出所有的链接 url 匹配 ”foo.com", 甚至是 "找出那些表头是粗体文字,然后返回给我文字“.
    那些设计不好的网站中的有价值的数据可以被你一次锁定,原本要花数个小时候的工作,通过使用 Beautiful Soup 可以在几分钟内搞定。
    下面让我们快速开始:
     首先引用包:



  • from BeautifulSoup import BeautifulSoup          # For processing HTML
  • from BeautifulSoup import BeautifulStoneSoup     # For processing XML
  • import BeautifulSoup                             # To get everything
复制代码  下面使用一段代码演示Beautiful Soup的基本使用方式。你可以拷贝与粘贴这段代码自己运行。



  • from BeautifulSoup import BeautifulSoup
  • import re

  • doc = ['Page title',
  •        'This is paragraph one.',
  •        'This is paragraph two.',
  •        '']
  • soup = BeautifulSoup(''.join(doc))

  • print soup.prettify()
  • #
  • #  
  • #   
  • #    Page title
  • #   
  • #  
  • #  
  • #   
  • #    This is paragraph
  • #   
  • #     one
  • #   
  • #    .
  • #   
  • #   
  • #    This is paragraph
  • #   
  • #     two
  • #   
  • #    .
  • #   
  • #  
  • #
复制代码  下面是一个解析文档的方法:



  • soup.contents[0].name
  • # u'html'

  • soup.contents[0].contents[0].name
  • # u'head'

  • head = soup.contents[0].contents[0]
  • head.parent.name
  • # u'html'

  • head.next
  • # Page title

  • head.nextSibling.name
  • # u'body'

  • head.nextSibling.contents[0]
  • # This is paragraph one.

  • head.nextSibling.contents[0].nextSibling
  • # This is paragraph two.
复制代码  接着是一打方法查找一文档中包含的标签,或者含有指定属性的标签



  • titleTag = soup.html.head.title
  • titleTag
  • # Page title

  • titleTag.string
  • # u'Page title'

  • len(soup('p'))
  • # 2

  • soup.findAll('p', align="center")
  • # [This is paragraph one. ]

  • soup.find('p', align="center")
  • # This is paragraph one.

  • soup('p', align="center")[0]['id']
  • # u'firstpara'

  • soup.find('p', align=re.compile('^b.*'))['id']
  • # u'secondpara'

  • soup.find('p').b.string
  • # u'one'

  • soup('p')[1].b.string
  • # u'two'
复制代码  当然也可以简单地修改文档



  • titleTag['id'] = 'theTitle'
  • titleTag.contents[0].replaceWith("New title")
  • soup.html.head
  • # New title

  • soup.p.extract()
  • soup.prettify()
  • #
  • #  
  • #   
  • #    New title
  • #   
  • #  
  • #  
  • #   
  • #    This is paragraph
  • #   
  • #     two
  • #   
  • #    .
  • #   
  • #  
  • #

  • soup.p.replaceWith(soup.b)
  • #
  • #  
  • #   
  • #    New title
  • #   
  • #  
  • #  
  • #   
  • #    two
  • #   
  • #  
  • #

  • soup.body.insert(0, "This page used to have ")
  • soup.body.insert(2, " <p> tags!")
  • soup.body
  • # This page used to have two <p> tags!
复制代码  最后,为大家提供 Beautiful Soup 的文档。希望能对您有帮助。
  
  转载文章 ,请注明来自  米趣网

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61235-1-1.html 上篇帖子: Python常见文件操作的函数示例 下篇帖子: 深入Python(5):random与range
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表