BeautifulSoup操作

前面向大家介绍了 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 可以在几分钟内搞定。
    下面让我们快速开始:
     首先引用包:

  1. from BeautifulSoup import BeautifulSoup          # For processing HTML
  2. from BeautifulSoup import BeautifulStoneSoup     # For processing XML
  3. import BeautifulSoup                             # To get everything[/font][/color]
复制代码

   下面使用一段代码演示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>

作为一个网页制作高手、美工和程序员,我们都有过这样的经历:当看到一个漂亮的Flash的 时候或看到一个精巧的JavaScript功能的时候,使用IE的查看源代码的功能,仔细分析相关 的HTML代码,从临时目录中或网站上取得想要的SWF文件和JS文件。吸取别人优点的做法往 往能够事半功倍,互联网中这样的宝藏真是不计其数!WebPage Spy就是一个帮助我们挖掘这 些宝藏的工具,他能够将您想要从网页中得到的一切分门别类的呈现在您眼前! WebPage Spy有一个HTML代码分析器,它能够在网页在浏览器显示一个网页的时候自动从其中 分析出该网页所含的HTML文件、Flash文件、JavaScript代码、Style Sheet代码、图像文件、 Applet文件、链接等等。所有这些显示在树形列表中,点击鼠标就可以查看图像和浏览代码, 可以将自己喜欢的文件保存到自己指定的目录中。 WebPage Spy还提供了许多附件来增强IE的功能,这些功能添加在同内容相关的右键菜单中, 您可以根据自己的需要选用:您可以使用“搜索包含此内容的网站“和“在新闻组中搜索此内容” 功能在互联网上搜索在网页中选中的文字;您可以使用“查看所选部分的代码”来查看网页的 部分HTML代码,方便程序调试和代码分析;“放大“、“缩小”和“高亮度显示文字”功能方便您在 演示的时候更好的标示重点,等等。 WebPage Spy还将常用的IE配置功能通过菜单的方式提供,您只要点击一下就可以达到目的, 再也不用总是进入“工具/Internet选项”,在选项卡中来回翻找。提供的快捷功能有:删除临 时文件,删除cookies,清除历史纪录。提供的选项开关有:显示图片,禁止脚本调试,启用 自动完成功能,允许脚本运行,允许Java Applet运行,允许ActiveX和插件运行。 赶快拥有WebPage Spy,发掘网页中无尽的宝藏! 产品特性 * 在您浏览网页的同时自动运行; * 同IE完美集成,可以象收藏夹那样显示和关闭; * 支持含Frame和IFrame的网页; * 将Flash, 图像, JavaScript, Style Sheet, 链接分类显示在树中; * 能够生成网页的所含外部元素的报告,并估算整个网页完全下载所需的时间; * 双击鼠标查看JavaScript, Style Sheet和网页的源代码; * 保存任何喜欢的内容; * 提供很多增强IE功能的附件; * 自定义增加的附件的数量; * 提供改变IE设置的快捷操作; * 图像列表可以将页面背景图,表格背景图等都列举出来; * JavaScript和Style Sheet列表包含链接的外部文件,也包含网页中内含的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值