zoukankan      html  css  js  c++  java
  • [Python]BeautifulSoup—HTML解析包

    在用Python写爬虫时,一个常见的操作是对抓下的HTML做分析处理,得到想要的内容。一般的方法为使用Python的re库中。用正則表達式来解析文本。只是这样的方法适用于全部的文本。而针对于特定格式的文本,如这里的HTML。BeautifulSoup更具有针对性,使用起来也更方便。

    BeautifulSoup能够解析HTML。XML等文件,这里仅仅说明其解析HTML的功能。

    BeautifulSoup(下面简称BS)的官方网站为:http://www.crummy.com/software/BeautifulSoup/

    BS把HTML看做一个树形,以标签和文本为基本类型,一个标签包括其它标签。被解析为一个标签是还有一个标签的子树。那么。终于整个HTML文档被解析为一棵树的形式。

    BS包含四种基本类型:

    Soup(树),Tag(标签节点),String(字符节点),Comment(凝视节点)。

    例如以下图:


    这四种类型的节点构成树,Soup代表这颗树。String为叶子节点,tag为标签子节点,为其标签包括的全部内容。

    建树

    import bs4#导入BeautifulSoup库

    Soup = BeautifulSoup(html)#当中html 能够是字符串。也能够是句柄

    须要注意的是,BeautifulSoup会自己主动检測传入文件的编码格式,然后转化为Unicode格式

    通过如上两句话。BS自己主动把文档生成为如上图中的解析树。

    节点属性

    能够通过Tag.attrs訪问,返回字典结构的属性。

    或者Tag.name这样訪问特定属性值,假设是多值属性则以列表形式返回。

    遍历

    子节点:

    Tag.Tag_child1:直接通过下标名称訪问子节点。

    Tag.contents:以列表形式返回全部子节点。

    Tag.children:生成器,可用于循环訪问:for child in Tag.children

    String 子节点:

    Tag.String:Tag仅仅有一个String子节点是,能够这么訪问,否则返回None

    Tag.Strings:生成器。可用于循环訪问:for str in Tag.Strings

    子孙节点:

    Tag.descendants:生成器,可用于循环訪问:for des inTag.descendants

    父节点:

    Tag.parent:父节点

    Tag.parents:父到根的全部节点

    兄弟节点:

    Tag.next_sibling

    Tag.next_siblings


    Tag.previous_sibling

    Tag.previous_siblings

    查找

    最经常使用的是find_all()函数

    方法搜索当前tag的全部tag子节点,并推断是否符合过滤器的条件。

    find_all( name , attrs , recursive , text ,**kwargs )

    第一个參数为Tag的名称

    #第一个參数为Tag的名称,如:
    tag.find_all(‘title’)
    #得到”<title>&%^&*</title>”,结果为一个列表

    第二个參数为匹配的属性

    tag.find_all(“title”,class=”sister”)
    #得到如”<title class = “sister”>%^*&</title>
    第二个參数也能够为字符串,得到字符串匹配的结果

    tag.find_all(“title”,”sister”)
    #得到如”<title class = “sister”>%^*&</title>

    完整具体的中文文档见:

    http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

  • 相关阅读:
     selenium webdriver test
    V8 初次接触(Qt5) 1+1=2 博客频道 CSDN.NET
    C++11 FAQ中文版
    做技术的,因为年龄和颈椎问题,想逐渐脱离码农状态,大家对3035岁职业规划有什么好的建议? 知乎
    一些idea
    如何来区分是我写的还是我转载的,
    firecurl
    python为什么叫好不叫座
    QTextCodec中的setCodecForTr等终于消失了 (Qt5) 1+1=2 博客频道 CSDN.NET
    Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7241143.html
Copyright © 2011-2022 走看看