zoukankan      html  css  js  c++  java
  • beautifulsoup用法2 (find_all select)

    from bs4 import BeautifulSoup
    
    html = """
         <html>
            <head><title>标题</title></head>
            <body>
                <p class="story" name="dromouse">从前有三个小姐妹,她们的名字是
                <a href="http://example.com/elsie" class="sister" id="link1"><!--Elseie--></a>,
                <a href="http://example.com/lacie" class="sister" id="link2"><b>Lacie</b></a>,
                <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
                她们生活在一个井的下面</p>
                <p class="story">...</p>
            </body>
         </html>
    """
    # find_all方法 传入参数   属性="..." , name=标签名 class加_因为是关键词
    soup = BeautifulSoup(html, 'lxml')
    # for a in soup.find_all(name='a'):
    #     print(a)
    # for a in soup.find_all(class_='sister'):
    #     print(a)
    # 使用attrs  text匹配文本 例如 text="Lacie" 也可以传入正则表达式
    # for a in soup.find_all(attrs={'class': 'sister'}):
    #     print(a)
    # ######################################find方法#######################################################
    # 返回单个 用法同上
    # print(soup.find(name="p"))
    # 祖先parents  唯一父元素parent 只能先指定一个元素来进行查找 元组不行
    # print(soup.find_all(name='a').find_parent(name="p"))# 这不可行
    # print(soup.find(name='a').find_parent(name="p"))
    # print(soup.find(name='a').find_parents())
    # 前一个兄弟节点  后一个兄弟节点
    print(soup.find(name='a').find_next_sibling())
    print(soup.find(id='link2').find_previous_sibling())
    # 前面的兄弟节点 后面的兄弟节点  返回元组
    print(soup.find(name='a').find_next_siblings())
    print(soup.find(id='link3').find_previous_siblings())
    # 前一个元素 后一个元素
    print(soup.find(name='a').find_next())
    print(soup.find(id='link3').find_previous())  # 查到的是b  因为 <a><b></b></a> a->b这样的结构 在他前面是b元素
    # 前面的所有元素  后面的所有元素 返回元组
    print(soup.find(name='a').find_all_next())
    print(soup.find(id='link3').find_all_previous())
    
    # #######################################selectcss选择器# ################################################
    # 查找class为sister的 返回的是结果元组
    print(soup.select(".sister"))
    print(soup.select("#link1"))  # id查询 返回的也是元组
    print(soup.select("#link2 b"))  # 返回下级元素
    # 嵌套查询 就是在已经查出的结果里面查询
    for p in soup.select('p'):
        print(p.select('a'))
    # 获取属性 attrs
    for a in soup.select('a'):
        print(a.attrs['id'])
    # 获取文本 get_text()
    for b in soup.select('b'):
        print(b.get_text())
    

      

    你不能把坏习惯扔出窗外 但你可以一步步赶下电梯
  • 相关阅读:
    剑指 Offer 30. 包含min函数的栈
    剑指 Offer 12. 矩阵中的路径
    剑指 Offer 11. 旋转数组的最小数字
    剑指 Offer 04. 二维数组中的查找
    LeetCode——139. 单词拆分
    LeetCode——(每日一题)恢复空格
    MySQL专职DBA博客目录-周万春
    MySQL专职DBA,微信群,技术群,交流群,开车群
    DBA生产经验总结
    创建MySQL账户
  • 原文地址:https://www.cnblogs.com/Ychao/p/9375682.html
Copyright © 2011-2022 走看看