文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> 资讯>Python 插件杂谈 之 BeautifulSoup

Python 插件杂谈 之 BeautifulSoup

时间:2010-08-16  来源:cnblogs

  前面向大家介绍了 PyQuery,下面转而介绍一下 BeautifulSoup。

  Beautiful Soup 是 Python 内置的网页分析工具,名字叫美丽的蝴蝶,是一个可以快速地解析网页内容的Python HTML/XML 解析器。

     重要特性:

  • 可接受损坏的标签文档,在内部生成一棵剖析树,并尽可能和你的原文档一致。通常可以满足搜集数据的需求。
  • 提供和python语法相近的命令来查找、编辑。它提供一个工具集帮助你解析并解释出你需要的内容。这样你就不必为每一个应用创建自己的解析工具。
  • 自动将传进来的文档转换为 Unicode 编码 ,输出的时候转换为 UTF-8。可以解析任何你提供的文档,做解析的事情。你可以命令他“找出所有的链接",或者"找出所有 class 是 externalLink 的链接",或是"找出所有的 url 匹配正则表达式 ”foo.com" 的链接,甚至可以是这样的命令---“找出那些表头是粗体文字,然后返回给我文字”。

  在 BeautifulSoup 的帮助下,原本要花数个小时的工作,通过 Beautiful Soup 几分钟即可搞定。

  下面让我们看看几个样例。

from BeautifulSoup import BeautifulSoup      #解析HTML   

from BeautifulSoup import BeautifulStoneSoup     #解析XML 

import BeautifulSoup  #获取任何信息

  下面使用一段代码演示Beautiful Soup的基本使用方式。你可以拷贝与粘贴这段代码自己运行。

  1. from BeautifulSoup import BeautifulSoup
  2. import re
  3. doc = ['<html><head><title>Page title</title></head>',
  4.        '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
  5.        '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
  6.        '</html>']
  7. soup = BeautifulSoup(''.join(doc))
  8. print soup.prettify()
  9. #<html>
  10. #  <head>
  11. #   <title>
  12. #    Page title
  13. #   </title>
  14. #  </head>
  15. #  <body>
  16. #   <p id="firstpara" align="center">
  17. #    This is paragraph
  18. #    <b>
  19. #     one
  20. #    </b>
  21. #    .
  22. #   </p>
  23. #   <p id="secondpara" align="blah">
  24. #    This is paragraph
  25. #    <b>
  26. #     two
  27. #    </b>
  28. #    .
  29. #   </p>
  30. #  </body>
  31. #</html>

  下面是一个解析文档的方法:

  1. soup.contents[0].name
  2. # u'html'
  3. soup.contents[0].contents[0].name
  4. # u'head'
  5. head = soup.contents[0].contents[0]
  6. head.parent.name
  7. # u'html'
  8. head.next
  9. #<title>Page title</title>
  10. head.nextSibling.name
  11. # u'body'
  12. head.nextSibling.contents[0]
  13. #<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>
  14. head.nextSibling.contents[0].nextSibling
  15. #<p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>

  接着是一打方法查找文档中包含的标签,或者含有指定属性的标签

  1. titleTag = soup.html.head.title
  2. titleTag
  3. #<title>Page title</title>
  4. titleTag.string
  5. # u'Page title'
  6. len(soup('p'))
  7. # 2
  8. soup.findAll('p', align="center")
  9. # [<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>]
  10. soup.find('p', align="center")
  11. #<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>
  12. soup('p', align="center")[0]['id']
  13. # u'firstpara'
  14. soup.find('p', align=re.compile('^b.*'))['id']
  15. # u'secondpara'
  16. soup.find('p').b.string
  17. # u'one'
  18. soup('p')[1].b.string
  19. # u'two'

  当然也可以简单地修改文档

  1. titleTag['id'] = 'theTitle'
  2. titleTag.contents[0].replaceWith("New title")
  3. soup.html.head
  4. #<head><title id="theTitle">New title</title></head>
  5. soup.p.extract()
  6. soup.prettify()
  7. #<html>
  8. #  <head>
  9. #   <title id="theTitle">
  10. #    New title
  11. #   </title>
  12. #  </head>
  13. #  <body>
  14. #   <p id="secondpara" align="blah">
  15. #    This is paragraph
  16. #    <b>
  17. #     two
  18. #    </b>
  19. #    .
  20. #   </p>
  21. #  </body>
  22. #</html>
  23. soup.p.replaceWith(soup.b)
  24. #<html>
  25. #  <head>
  26. #   <title id="theTitle">
  27. #    New title
  28. #   </title>
  29. #  </head>
  30. #  <body>
  31. #   <b>
  32. #    two
  33. #   </b>
  34. #  </body>
  35. #</html>
  36. soup.body.insert(0,"This page used to have ")
  37. soup.body.insert(2,"&lt;p&gt; tags!")
  38. soup.body
  39. #<body>This page used to have <b>two</b> &lt;p&gt; tags!</body>

  最后,为大家提供 Beautiful Soup 的文档。希望能对您有帮助。

  英文原文:http://www.crummy.com/software/BeautifulSoup/ (翻译有删节,请查看原文链接)


  相关新闻:
  · Python 2.6 正式版发布(2008-10-02)
  · Python发布2.6a3和3.0a5版本(2008-05-20)
  · Python 2.5.5 正式发布(2010-02-01)
  · 话说Python:非主流编程语言(2010-04-14)
  · Python与Perl合并,打造史上最牛语言Parrot(2010-04-01)

  

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载