day-02-bs4用法

BeatifulSoup

什么是BeatifulSoup

  • BeautifulSoup,和lxml一样,是一个html的解析器
    主要功能也是解析和提取数据

优缺点

  • 效率没有lxml的效率高
  • 接口设计人性化,使用方便

安装

  • pip install bs4

导入

  • from bs4 import BeautifulSoup

创建对象

  • 网上文件生成对象

    • soup = BeautifulSoup(‘网上下载的字符串’, ‘lxml’)
  • 本地文件生成对象

    • soup = BeautifulSoup(open(‘filename.html’), ‘lxml’)

节点定位

  • 根据标签名查找节点

    • soup.a 【注】只能找到第一个a

      查找所有a标签节点

  • 函数

    • find(返回一个对象)

      【注】

      1. 不能使用name属性查找

      2. class_后面有下划线

      3.可以使用自定义属性,比如age

      • find(‘a’):只找到第一个a标签

      • find(‘a’, title=‘名字’)

      • find(‘a’, id=‘名字’)

      • find(‘a’, class_=‘名字’)

        #需要重点注意_

    • find_all(返回一个列表)

      • find_all(‘a’) 查找到所有的a
      • find_all([‘a’, ‘span’]) 返回所有的a和span
      • find_all(‘a’, limit=2) 只找前两个a
    • select(根据选择器得到节点对象)【推荐】

      在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。

      select选择器,接受一个以字符串表示的路径

      “//div[@class]”

      • element

        div

        • p

          选择所有

          元素。

      • .class

        [@class =]
        @class

        • .firstname

          选择 class=“firstname” 的所有元素

      • #id

        [@id=]
        @id

        • #firstname

          选择 id=“firstname” 的所有元素

      • 属性选择器

        • [attribute]

          • [target]

            选择带有 target 属性所有元素
            eg.
            li[class] 选择带有class属性的所有li标签

        • [attribute=value]

          • [target=blank]

            选择 target=“blank” 的所有元素。

            div[target=blank]

      • 层级选择器

        • element element

          • div p

            类似xpath中的//

            选择

            元素内部的所有

            元素

        • element>element

          • div>p

            选择

            元素的所有直接子

            元素。

        • element,element

          • div,p

            选择所有

            元素和所有

            元素
            所有标签在同一个双引号中

  • 获取子孙节点

    • contents:返回的是一个列表

      【注意】中间也会得到很多的换行符

    • descendants:返回的是一个生成器

节点信息

  • 获取节点内容

    • obj.string

    • obj.get_text()【推荐】

      这是一个段落

  • 节点的属性

    • tag.name 获取标签名

      tag = find('li)
      tag.name

    • tag.attrs将属性值作为一个字典返回

      {属性名称:属性值}

  • 获取节点属性

    • obj.attrs.get(‘title’)
    • obj.get(‘title’)
    • obj[‘title’]

节点类型

判断节点类型

import bs4

ul_list = soup.ul.contents
for ul in ul_list:
# print(type(ul),str(ul))
if type(ul) == bs4.element.Tag:
print(ul)

  • bs4.BeautifulSoup 根节点类型
  • bs4.element.NavigableString 连接类型
  • bs4.element.Tag 节点类型
  • bs4.element.Comment 注释类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值