笔记主要参考: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
6key : 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()
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·