zoukankan      html  css  js  c++  java
  • BeautifulSoup的使用

    最近在搞页面的信息获取,之前一直用xpath,结果公司的源码里面用的是beautifulSoup,因此今天拿来学习一下

    安装

    pip install beautifulsoup4
    

    使用方法

    • 主要分为三种方法

      1. 节点选择器
      2. 方法选择器
      3. CSS选择器
    • 使用建议:

      ​ 优先使用方法选择器、其次是CSS选择器,最后是节点选择器

    样例

    from bs4 import BeautifulSoup
    
    text = '''
    <html><head><title>there is money</title></head>
    <body>
    <p class="title" name="dmr"><b>there is money</b></p>
    <p class="money">good good study, day day up
    <a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
    <a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and 
    <a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
    66666666666
    </p>
    <p class='body'>...</p>
    '''
    
    # 实例化soup对象
    soup = BeautifulSoup(text, 'lxml')
    
    # 节点选择器
    print(soup.title, type(soup.title))
    # 提取节点里面的文本内容
    print(soup.title.string)
    # 提取p标签的属性
    print(soup.p.attrs)
    # 获取p标签的class的属性值, 一个class可能会有多种属性,因此class属性被封装成列表
    print(soup.p.attrs.get('class'))
    
    
    
    # 嵌套
    # 下面的例子为:获取第二个p标签下的子节点
    # 思路:先找到所有的p标签,找到指定的p标签,.children找出其对应的子节点
    print(list(soup.find_all('p')[1].children))
    # 寻找一个节点的父节点
    print(soup.a.parent)
    
    print(soup.a.parents)  # 返回一个迭代器,建议使用
    for i in soup.a.parents:
        print(i)
    
    # 寻找兄弟节点
    print(soup.a.next_siblings)  # 返回迭代器,里面是与a标签关联的兄弟节点,但是如果有字符串的话,也会被认为是兄弟节点
    for i in soup.a.next_siblings:
        print(i, type(i))
    
    print(soup.a.previous_sibling)  # 注意属性结尾没有s,只返回一个结果。就是a标签的上一个兄弟节点
    print(soup.a.previous_siblings, type(soup.a.previous_siblings))
    for i in soup.a.previous_siblings:
        print(i)
    
    # 方法选择器
    # find_all方法,查询所有符合条件的,返回一个列表,元素类型为tag
    # find方法,查询符合条件的第一个元素,返回一个tag类型对象
    # 同理,find_parents和find_parent
    # find_next_siblings和find_next_sibling
    # find_previous_siblings和find_previous_sibling
    # find_all_next和find_next
    # find_all_previous和find_previous
    
    print(soup.find_all("a", attrs={"id": "l2"}))  # 如果使用这种方法去找标签,可以通过attrs这个参数指定想找标签的属性
    
    # CSS选择器  关键字:select
    print(soup.select("p a"))  # 标签选择器
    print(soup.select(".error"))  # 类选择器
    print(soup.select("a")[2].get_text())
    
  • 相关阅读:
    MyBatis原理分析
    oracle修改数据遇到的坑
    oracle查询时遇到的坑
    maven镜像
    易错题
    binlog2sql 安装使用
    Archery SQL审核平台搭建
    Docker安装
    夜莺n9e监控搭建
    influxdb安装
  • 原文地址:https://www.cnblogs.com/zcg921001/p/13518578.html
Copyright © 2011-2022 走看看