-1

我正在尝试为现有的 itertags 制作一个包装函数:https ://github.com/streamlink/streamlink/blob/master/src/streamlink/plugin/api/utils.py#L16

目前我有这个:

def itertags_wrapper(html, tag, attrs=None, ret=False):

    try:

        result = list(itertags(html, tag))

        if isinstance(attrs, dict):

            attrs = list(iteritems(attrs))

            result = [i for i in result if any([a for a in attrs if a in list(iteritems(i.attributes))])]

        if ret:

            # noinspection PyTypeChecker
            result = [i.attributes[ret] for i in result if ret in i.attributes]

    except Exception:

        result = []

    return result

现在它返回包含与 attrs 中完全相同的键值对的标签,但是我如何在正则表达式模式中获得该对的值并扩大可能的结果?

PS iteritems 首先通过“compat”模块在 python 2 和 3 上工作。

4

1 回答 1

0

经过大量测试,我想出了这个解决方案:

def itertags_wrapper(html, tag, attrs=None, ret=False):

    try:

        result = list(itertags(html, tag))

        if isinstance(attrs, dict):

            attrs = list(iteritems(attrs))

            result = [
                i for i in result if any(
                    [a for a in attrs if any([a[0] == k and re.match(a[1], v) for k, v in iteritems(i.attributes)])]
                )
            ]

        if ret:

            # noinspection PyTypeChecker
            result = [i.attributes[ret] for i in result if ret in i.attributes]

    except Exception:

        result = []

    return result

我所做的只是添加 attrs 键值对的第二次迭代。

于 2020-07-03T10:46:29.120 回答