【问题标题】:Regular expressions in Beautiful soup don't workBeautiful soup 中的正则表达式不起作用
【发布时间】:2015-09-04 20:00:25
【问题描述】:

我正在寻找一个标签。这个标签的类包含这个子字符串:borderbox flightbox p2

例如:<div class="borderbox flightbox p2 my-repeat-animation ng-scope"...

所以我想这应该可行:

soup.find_all('div',class_=re.compile(r"borderbox flightbox p2"+".*"))

但它找不到任何东西。你有什么建议吗?

【问题讨论】:

    标签: python html regex beautifulsoup


    【解决方案1】:

    这应该做你想做的:

    def match_tag(tag, classes):
        return (tag.name == 'div'
                and 'class' in tag.attrs
                and all([c in tag['class'] for c in classes]))
    
    divs = soup.find_all(lambda t: match_tag(t, ['borderbox', 'flightbox', 'p2'))
    

    在 BeautifulSoup 4 中,传递给 class_ 参数的正则表达式分别应用于每个 CSS 类。 BeautifulSoup 正在检查您的 div 持有的每个单独的 CSS 类,以查看它是否与您提供的正则表达式匹配。将其放入代码中,它正在执行以下操作:

    for class in div['class']:
        if regexp.search(class): yield div
    

    当然,您所拥有的任何个人课程都不会与您的正则表达式相匹配;在'borderbox''flightbox''p2' 中找不到'borderbox flightbox p2'

    解决方法是利用 BeautifulSoup 的取函数能力为你做匹配。 match_tag 检查 (1) 标签是 div 和 (2) 标签具有由参数 classes 指定的每个 CSS 类。

    【讨论】:

      【解决方案2】:

      BeautifulSoup 相当于 re.search(),而不是 re.match()

      试试

      soup.find_all('div', class_=re.compile('borderbox flightbox p2 \d+'))
      

      【讨论】:

        猜你喜欢
        • 2012-11-27
        • 2018-08-28
        • 2019-08-28
        • 2020-05-31
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        相关资源
        最近更新 更多