BeautifulSoup库学习笔记

笔记主要参考:Python网络爬虫与信息提取

bs4库的基本元素

概念 解释
Tag 标签
Name 标签名 .name
Attributes 属性 .attrs 返回值为字典类型
NavigableString 字符串 .string
Comment 注释 .comment

标签树的遍历

向上遍历

  • .parent < Tag >
  • .parents < Generator >

    向下遍历

  • .contents < list > 只会列出下一层孩子节点
  • .children < list_Iterator >用于for循环遍历,只会遍历下一层孩子节点
  • .descendants < Generator >用于for循环遍历,会递归遍历子树所有孩子节点

    平行遍历(遍历同一颗子树中的兄弟节点,兄弟节点可以是标签也可以是独立的字符串,包括换行符)

  • .next_sibling < Tag >
  • .previous_sibling
  • .next_siblings < Generator >
  • .previous_siblings

信息的标记

  • XML是一种标签标记语言
    • 标签 < name > … < /name > 或 < name / >
    • 注释 < !– Comments – >
  • JSON是一种用有类型的键值对表达信息的方式(如ss的配置文件)

    1
    2
    3
    "key" : "value"
    "key" : ["value1", "value2"]
    "key" : { "subkey" : "subvalue" }
  • YAML是一种用无类型键值对表达信息的形式(如hexo的_config.yml)

    1
    2
    3
    4
    5
    6
    key : value
    key : #comment
    - value1
    - value2
    key:
    subkey: subvalue
  • 各自特点

    • XML Internet上的信息交互与传递(如html)
    • JSON 移动应用云端和节点的信息通信,无注释 (如ss的配置文件,它可以作为程序的一部分执行)
    • YAML 各类系统的配置文件,有注释易读(如hexo)

信息的搜索与提取

  • <>.get() 获取某个Tag下某项属性的值
  • <>.find_all(name, attrs, recursive, string, \*\*kwargs)
  • name 标签名,如果要搜索多个名字可以用列表类型,如[‘a’, ‘b’]
  • attrs 属性值(可以是部分属性,注意是用字典类型表示
  • recursive 是否递归搜索,默认为True
  • string 搜索NavigableString,可以配合正则表达式使用
  • **kwargs 允许像id = 'link1'这样直接搜索属性
  • 允许这样用:<>.find_all('p', string = 'Python Course')
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <>.find_all()等价于<>()
    <>.find()搜索且只返回一个结果
    <>.find_parents() < list >
    <>.find_parent() < Tag >
    <>.find_next_sibling()
    <>.find_next_siblings()
    <>.find_previous_sibling()
    <>.find_previous_siblings()
    <>.find_next() 搜索HTML文本中下个位置出现的结果
    <>.find_all_next()

·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·