bs4 -- 数据解析常用方法

bs4.py – 数据解析

'''
此文件中的 类和函数 均可看作是 bs4模块里面的对应注释

安装: pip install bs4
'''

class BeautifulSoup

'''
导入: from bs4 import BeautifulSoup

实例化: soup = BeautifulSoup(html, 解析器)
'''

soup对象

class BeautifulSoup():
    def __init__(self, markup: str, features: str):
        '''
        初始化soup对象; 解析器读取文档
        
        print(soup对象): <html>xx</html>

        :param markup: 要解析的 (str)html; 也可以是本地的html 传入open(xx)即可
        :param features: 指定解析器;
            "lxml": 速度快; 文档容错能力强; 需安装 pip install lxml (首选)
            "html.parser": 执行速度适中; 文档容错能力强; 内置标准库 无需安装 (次选,lxml无法解析的用它)
            "html5lib": 速度慢; 最好的容错性; 以游览器的方式解析文档; 生成HTML5的文档; 需安装 pip install html5lib (次次选,html.parser无法解析的用它)
            "xml": 速度快; 唯一支持XML的解析器; 需安装 pip install xml (xml语言的解析器, 没用过)
        '''

Tag对象

'''
不同点:
	soup对象是需要手动实例化后产生的 对象
	Tag对象是soup对象调用方法后 返回的对象
	
相同点:
	可以调用的方法是一样的
	
print(Tag对象): <标签>xx<标签>
'''

查找Tag对象

    def find(self, name: str = None, attrs: dict = {}, recursive: bool = True, text: str = None):
        '''
        匹配 第一个符合 属性条件 的标签

        :param name:      (可选) 标签名, 如 'div' 、'span'...
        :param attrs:     (可选) 属性条件;
        :param recursive: (可选) 只有Tag对象能用, 默认为True: 递归查找页面元素的子孙标签; 为False: 只查找当前Tag对象最上级标签的子标签
        :param text:      (可选) 按照字符串匹配, 完全匹配 比较鸡肋; 如: 要找'设置', 只能匹配到 <a>设置</a>, 匹配不到 <a>设置1</a>;
                如只用text匹配, 则只返回匹配到的字符, 一般 当标签没有属性时,配合name使用.
        :return: Tag对象(符合条件的html代码)

        :属性条件用法:
            1. 属性='值';  例: name='xx', class_='xx'   (不推荐)
            2. attrs={'属性': '值',...};  例: {'id': 'xx', 'name': 'xx'} (推荐)
        '''

    def find_all(self, name: str = None, attrs: dict = {}, recursive: bool = True, text: str = None, limit: int = None):
        '''
        匹配 所有符合 属性条件 的标签

        :param name:      (可选) 标签名
        :param attrs:     (可选) 属性条件; 用法同 find
        :param recursive: (可选) 同 find
        :param text:      (可选) 同 find
        :param limit:     (可选) 找到 n 个符合条件的标签后就不找了
        :return: 'bs4.element.ResultSet' 伪列表; 存放着所有符合条件的 Tag对象 的伪列表
        '''

获取对象文本

    @property
    def text(self):
        '''
        获取(soup或Tag)对象中的文本;

        :return: (str) (soup或Tag)对象中包含的所有 文本;
        '''

    def get_text(self,separator="", strip=False):
        '''
        获取(soup或Tag)对象中的文本;

        :param separator: 分隔符; 每个节点的文本中间插入 分隔符 分隔
        :param strip: 默认为False; True为 去除前后空白;
        :return: (str) (soup或Tag)对象中包含的所有 文本;
        '''

    @property
    def stripped_strings(self):
        '''
        用法1: 直接获得文本列表后手动处理列表
            text_list = [text for text in (soup或Tag)对象.stripped_strings]
        用法2: 数据量大时 遍历生成器 每次返回1个文本, 处理完在进行下次循环

        :return: (生成器) 内含每个节点的文本
        '''

获取属性

    def attrs(self):
        '''
        返回一个字典, 存放着Tag对象当前最上级节点的 所有属性值

        :return: (dict) 格式: {属性: 值} or {属性: [值, 值]}
        '''

    def get(self, key, default=None):
        '''
        封装的attrs()和普通字典的get一样; 获取Tag对象 当前最上级节点的指定属性值

        可以简写为 Tag对象['属性名']

        :param key: 属性名; 如 'id'、'name'、'class'...
        :param default: 当 未找到"key"属性对应的值时, 返回 default的值
        :return: 对应"key"的属性值; 未找到返回default的值(默认为None); 格式: (str)值 or (list)[值, 值]
        '''

    def get_attribute_list(self,key, default=None):
        '''
        和 get()一样, 不过返回值都为list格式
        
        :param key: 属性名; 如 'id'、'name'、'class'...
        :param default: 当 未找到"key"属性对应的值时, 返回 default的值
        :return: (list) [值...]
        '''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#空心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值