hugang 发表于 2015-4-27 12:41:53

Python 插件杂谈 (4)

  嗯哼,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.name
[*]# u'html'
[*]
[*]soup.contents.contents.name
[*]# u'head'
[*]
[*]head = soup.contents.contents
[*]head.parent.name
[*]# u'html'
[*]
[*]head.next
[*]# Page title
[*]
[*]head.nextSibling.name
[*]# u'body'
[*]
[*]head.nextSibling.contents
[*]# This is paragraph one.
[*]
[*]head.nextSibling.contents.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")
[*]#
[*]
[*]soup.find('p', align="center")
[*]# This is paragraph one.
[*]
[*]soup('p', align="center")['id']
[*]# u'firstpara'
[*]
[*]soup.find('p', align=re.compile('^b.*'))['id']
[*]# u'secondpara'
[*]
[*]soup.find('p').b.string
[*]# u'one'
[*]
[*]soup('p').b.string
[*]# u'two'
复制代码  当然也可以简单地修改文档



[*]titleTag['id'] = 'theTitle'
[*]titleTag.contents.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]
查看完整版本: Python 插件杂谈 (4)