zoukankan      html  css  js  c++  java
  • bs4

    from bs4 import BeautifulSoup
    from bs4.element import *
    data = """
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
                <title>beatifulsoup learning note</title>
            <head>
            <body>
                <div id='id1' class = 'parent'>
                    <span>i`m son1 <i>哈哈</i> </span>
                    <span>i`m son2 </span>
                </div>
                <div id='id2', class = 'parent2'>
                    <span>i`m son1 </span>
                    <span>i`m son2 </span>
                </div>
                <div>哇哈哈</div>
            </body>
        </html>
        """
    soup = BeautifulSoup(data, 'html.parser') # 创建一个实例,并制定解析引擎
    #bs4 中的四大对象,Tag, NavigableString, BeautifulSoup, and Comment
    #Tag 类似xml,html中的标签,如果学过html的话应该很好理解
    #tag 标签都有共同的属性name, attrs 每个属性都以键值对形式存放
    #print(soup.head.name)
    #title
    #print(soup.title)
    #meta
    #print(soup.meta.attrs)# attrs 所有属性
    #print(soup.meta['content']) #访问content属性
    #print(soup.meta.has_attr('content')) #判断是否含有某个属性
    #header
    #print(soup.head)
    #body
    #print(soup.body)
    #=====================BeautifulSoup=======================类似html中的顶层对象 document?
    #print(type(soup)) #'bs4.BeautifulSoup'
    #print(type(soup.head)) #<class 'bs4.element.Tag'>  嗯暂时就这样理解吧
    
    #=====================NavigableString=====================文本节点,文本字符串
    #parent1 = soup.find_all('div') #返回的是 bs4.element.ResultSet包含所有的tag
    #print(list(parent1))
    parent1 = soup.find('div', id = 'id1') #找到属性为id1的标签
    #print(parent1.name) #div
    
    #print(list(parent1.children)) #返回所有的子节点 ['
    ', <span>i`m son1</span>, '
    ', <span>i`m son2</span>, '
    ']
    #值得注意的是 children是一个可迭代对象,需要去遍历 当然我们可以通过contents直接取list
    #不要忘了
     	 也是一种节点,容易忽略的地方
    #print(parent1.contents) #['
    ', <span>i`m son1</span>, '
    ', <span>i`m son2</span>, '
    ']
    # 第一个span
    #print(parent1.span)#<span>i`m son1 </span>
    # span中的文本
    #print(parent1.span.string) #可以发现 string只获得纯文本,并包含子节点文本 此时返回了None
    #print(parent1.span.text) #可以返回所有的文本
    #print(parent1.get_text(strip = True)) #去除换行
    #============================next_sibling, next_element, previous_element, previous_sibling, parent, next_siblings==============
    #print(parent1.next_sibling.next_sibling) # 注意这里是两个next 因为之前说过
    也是一个节点 s
    #print(parent1.next_element.next_element)#  <span>i`m son1 <i>哈哈</i> </span>
    #print(list(parent1.next_siblings)) #所有的兄弟节点
    #print(list(parent1.next_elements)) #当前节点下的所有节点,包括兄弟节点, 子节点
    
    
    #以上只是总结常用的一些属性,方法,bs4是一个很强大的库,能够处理很复杂的数据环境,远不止这些。
  • 相关阅读:
    != 比 & 的优先级高
    VC++ 报错:Heap corruption detected
    sqlite 查询数据库中所有的表名,判断某表是否存在,将某列所有数值去重后获得数量
    Unicode与UTF-8,UTF-16
    各种格式的压缩包解压,7zip 命令行
    bat批处理文件运行时隐藏cmd窗口
    标准库中 vector list等排序
    duilib 实现列表头任意拖动
    duilib 实现 XML重用(item完全重合的CList)
    C++-POJ2503-Babelfish[hash]
  • 原文地址:https://www.cnblogs.com/alplf123/p/8376460.html
Copyright © 2011-2022 走看看