`
cnDenis
  • 浏览: 100244 次
  • 来自: 广州
社区版块
存档分类
最新评论

用Python解析HTML,BeautifulSoup使用简介

阅读更多

 

用Python解析HTML,BeautifulSoup使用简介

by cnDenis, http://cndenis.iteye.com, 2012年12月12日

 

Beautiful Soup,字面意思是美好的汤,是一个用于解析HTML文件的Python库。主页在 http://www.crummy.com/software/BeautifulSoup/ , 下载与安装无需啰嗦,这里就介绍一下它的使用吧。


装汤——Making the Soup

首先要把待解析的HTML装入BeautifulSoup。BeautifulSoup可以接受文件句柄或是字符串作为输入:

from bs4 import BeautifulSoup
fp = open("index.html")
soup1 = BeautifulSoup(fp)
soup2 = BeautifulSoup("<html>data</html>")

汤料——Soup中的对象

标签(Tag)

标签对应于HTML元素,也就是应于一对HTML标签以及括起来的内容(包括内层标签和文本),如:

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b

soup.b就是一个标签,soup其实也可以视为是一个标签,其实整个HTML就是由一层套一层的标签组成的。

名字(Name)

名字对应于HTML标签中的名字(也就是尖括号里的第一项)。每个标签都具有名字,标签的名字使用.name来访问,例如上例中,

tag.name == u'b'
soup.name == u'[document]'

属性(Atrriutes)

属性对应于HTML标签中的属性部分(也就是尖括号里带等号的那些)。标签可以有许多属性,也可以没有属性。属性使用类似于字典的形式访问,用方括号加属性名,例如上例中,

tag['class'] ==  u'boldest'

可以使用.attrs直接获得这个字典,例如,

tag.attrs == {u'class': u'boldest'}

文本(Text)

文本对应于HTML中的文本(也就是尖括号外的部分)。文件使用.text来访问,例如上例中,

tag.text ==  u'Extremely bold'

找汤料——Soup中的查找

解析一个HTML通常是为了找到感兴趣的部分,并提取出来。BeautifulSoup提供了findfind_all的方法进行查找。find只返回找到的第一个标签,而find_all则返回一个列表。因为查找用得很多,所以BeautifulSoup做了一些很方便的简化的使用方式:

tag.find_all("a")  #等价于 tag("a")
tag.find("a") #等价于 tag.a

因为找不到的话,find_all返回空列表,find返回None,而不会抛出异常,所以,也不用担心 tag("a")tag.a 会因为找不到而报错。限于python的语法对变量名的规定,tag.a 的形式只能是按名字查找,因为点号.后面只能接变量名,而带括号的形式 tag()tag.find() 则可用于以下的各种查找方式。

查找可以使用多种方式:字符串、列表、键-值(字典)、正则表达式、函数

  • 字符串: 字符串会匹配标签的名字,例如 tag.atag("a")

  • 列表: 可以按一个字符串列表查找,返回名字匹配任意一个字符串的标签。例如 tag("h2", "p")

  • 键-值: 可以用tag(key=value)的形式,来按标签的属性查找。键-值查找里有比较多的小花招,这里列几条:

    1. class
      class是Python的保留字,不能当变量名用,偏偏在HTML中会有很多 class=XXX 的情况,BeautifulSoup的解决方法是加一下划线,用 class_ 代替,如 tag(class_=XXX)
    2. True
      当值为True时,会匹配所有带这个键的标签,如 tag(href=True)
    3. text
      text做为键时表示查找按标签中的文本查找,如 tag(text=something)
  • 正则表达式: 例如 tag(href=re.compile("elsie"))

  • 函数: 当以上方法都行不通时,函数是终极方法。写一个以单个标签为参数的函数,传入 findfind_all 进行查找。如

    def fun(tag):
        return tag.has_key("class") and not tag.has_key("id")
    tag(fun) # 会返回所有带class属性但不带id属性的标签
    

再来一碗——按文档的结构查找

HTML可以解析成一棵标签树,因此也可以按标签在树中的相互关系来查找。

  • 查找上层节点:find_parents()find_parent()

  • 查找下一个兄弟节点:find_next_siblings()find_next_sibling()

  • 查找上一个兄弟节点:find_previous_siblings()find_previous_sibling()

以上四个都只会查同一父节点下的兄弟

  • 查找下层节点:其实上面说的find和find_all就是干这活的

  • 查找下一个节点(无视父子兄弟关系) find_all_next()find_next()

  • 查找上一个节点(无视父子兄弟关系) find_all_previous()find_previous()

以上的这些查找的参都和find一样,可以搭配着用。


看颜色选汤——按CSS查找

.select()方法,看 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors

一些小花招

  • BeautifulSoup 可以支持多种解析器,如lxml, html5lib, html.parser. 如:BeautifulSoup("<a></b>", "html.parser")

具体表现可参考 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#differences-between-parsers

  • BeautifulSoup 在解析之前会先把文本转换成unicode,可以用 from_encoding 指定编码,如:BeautifulSoup(markup, from_encoding="iso-8859-8")

  • soup.prettify()可以输出排列得很好看的HTML文本,遇上中文的话可以指定编码使其显示正常,如 soup.prettify("gbk")

  • 还是有编码问题,看:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unicode-dammit

 

0
0
分享到:
评论

相关推荐

    Python网页解析利器:BeautifulSoup使用指南

    BeautifulSoup是一个强大的库,它能够解析HTML和XML文档,提供简单直观的方法来定位和修改网页数据。本文将详细介绍如何在Python中使用BeautifulSoup进行网页解析,包括库的安装、基本用法、高级技巧以及最佳实践。 ...

    Python模块 - Beautifulsoup中文手册

    - **定义**:Beautiful Soup(简称“BS”)是Python语言的一个库,主要用于解析HTML或XML文档,并从中提取所需的数据。 - **作用**:通过喜欢的转换器(如lxml, html5lib等),提供方便的文档导航、搜索、更改文档的...

    深入解析:使用Python BeautifulSoup库处理HTML文档

    在Python中,BeautifulSoup是一个功能强大的库,用于解析HTML和XML文档。它能够从复杂的HTML中提取数据,而且使用起来非常灵活和方便。本文将详细介绍如何使用BeautifulSoup库来解析HTML文档,包括库的安装、基本...

    Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】

    本文实例讲述了Python HTML解析器BeautifulSoup用法。分享给大家供大家参考,具体如下: BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析...

    使用Python的BeautifulSoup库进行网页解析爬虫和数据提取.txt

    - **网页解析**:使用`BeautifulSoup`解析HTML文档,生成一个可以遍历的解析树结构。 - **数据提取**: - **提取网页标题**:通过`soup.title.string`获取网页的标题。 - **提取所有链接的文本**:使用`soup....

    B06_2_HTML解析库BeautifulSoup4.md

    HTML解析库BeautifulSoup4 HTML解析库BeautifulSoup4!!!

    python 3利用BeautifulSoup抓取div标签的方法示例

    在进行网页数据抓取时,经常需要用到Python的BeautifulSoup库来解析HTML文档,并从中提取有用的信息。在本篇文章中,我们将详细介绍如何使用Python 3结合BeautifulSoup来抓取特定的`div`标签及其内部的数据。通过...

    python+PyDocX+BeautifulSoup+PyQt5实现word转html的可视化插件

    其次,BeautifulSoup是一个用于解析HTML和XML文档的Python库。在这个项目中,它的主要作用是将PyDocX解析出来的Word内容结构化,并转换为HTML格式。BeautifulSoup提供了一套优雅的API,使得我们可以方便地操作文档树...

    Python爬虫包BeautifulSoup实例(三)

    在本篇实例文章中,作者详细介绍了如何使用Python中的爬虫库BeautifulSoup来构建一个爬虫程序,以糗事百科为例,抓取网站上用户发表的段子。在这个过程中,涉及到的知识点包括网络请求的发送、HTML内容的解析、正则...

    Python程序基础:解析利器beautifulsoup4库.pptx

    beautifulsoup4库也称为Beautiful Soup库或bs4库,用于解析和处理HTML和XML文件,其最大优点是能够根据HTML和XML语法建立解析树,进而提高解析效率。;由于beautifulsoup4库是第三方库,因此,需要通过pip3指令进行...

    能支持beautifulsoup的python版本

    1. **HTML和XML解析**:BeautifulSoup库提供了一种简单的方式来解析HTML和XML文档,通过创建一个解析树,使得开发者可以方便地遍历和提取数据。 2. **导航、搜索和修改解析树**:BeautifulSoup提供了丰富的API,如`...

    python实现网络爬虫使用了第三方库beautifulsoup来解析网页文件,并且实现了cookie登录特定网站访问.zip

    1. **创建解析器**:BeautifulSoup需要一个解析器来解析HTML或XML文档。通常,可以使用Python的内置解析器如`html.parser`,或者第三方解析器如`lxml`(速度更快)。 2. **解析网页**:使用`BeautifulSoup()`函数...

    python爬虫实例——基于BeautifulSoup与urllib.request

    本实例将深入探讨如何使用Python的BeautifulSoup库与urllib.request模块来实现一个基本的网页抓取功能。 首先,`urllib.request`是Python标准库中的一个模块,用于处理URL相关的请求。在爬虫领域,它主要负责发起...

    使用Python requests 和 BeautifulSoup 开发爬虫 抓取汽车之家中,汽车的基本信息(车型,品牌,报价

    首先需要导入BeautifulSoup,然后使用它的BeautifulSoup()函数解析HTML内容,并选择合适的解析器(如lxml或html.parser)。 以下是一段基本的代码示例,展示如何使用requests和BeautifulSoup获取网页内容: ```...

    Python爬虫库BeautifulSoup的介绍与简单使用实例

    BeautifulSoup库是灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页信息的提取。 Python常用解析库 解析器 使用方法 优势 劣势 Python标准库 BeautifulSoup...

    Python使用BeautifulSoup库解析HTML基本使用教程

    ### Python使用BeautifulSoup库解析HTML基本使用教程 #### 概述 在当今互联网时代,从网页上抓取数据成为了一项重要的技能。Python作为一种强大的编程语言,提供了多种库来实现这一目的,其中BeautifulSoup是最为...

    Python解析网页.xmind

    Python解析网页 Beautiful Soup 定义 是一个可以从HTML或XML文件中提取数据的Python库 优点 会帮你节省数小时甚至数天的工作时间 能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. ...

    Python使用requests及BeautifulSoup构建爬虫实例代码

    BeautifulSoup库用于解析HTML和XML文档,提取所需数据。下面将详细介绍这两个库的使用方法以及如何结合起来构建一个简单的爬虫实例。 首先,requests库是一个非常流行的HTTP库,它允许我们以非常简单的方式发送各种...

Global site tag (gtag.js) - Google Analytics