要使用 BeautifulSoup 查找所有字体大小大于最常见的 span 样式的 span 样式,您需要解析每个返回的 CSS 样式。
解析 CSS 最好使用 cssutils 之类的库。这将让您直接访问fontSize 属性。
这将有一个值,例如 12px,它不会自然地正确排序。为了解决这个问题,您可以使用诸如 natsort 之类的库。
所以,首先将每个样式解析为 css 对象。同时保留每个 span 的所有汤的列表,以及样式的解析 CSS。
现在使用fontSize 属性作为使用 natsort 进行排序的键。这将根据字体大小为您提供正确排序的样式列表,最大优先(使用reverse=True)。然后,takewhile() 用于创建列表中所有条目的列表,直到大小与最常见的条目匹配,从而导致条目列表大于最常见的条目。
from bs4 import BeautifulSoup
from collections import Counter
from itertools import takewhile
import cssutils
import natsort
html = """
<span style="font-family: ArialMT; font-size:12px">1</span>
<span style="font-family: ArialMT; font-size:14px">2</span>
<span style="font-family: ArialMT; font-size:1px">3</span>
<span style="font-family: Arial; font-size:12px">4</span>
<span style="font-family: ArialMT; font-size:18px">5</span>
<span style="font-family: ArialMT; font-size:15px">6</span>
<span style="font-family: ArialMT; font-size:12px">7</span>
"""
soup = BeautifulSoup(html, "html.parser")
style_counts = Counter()
parsed_css_style = [] # Holds list of tuples (css_style, span)
for span in soup.find_all('span', style=True):
style_counts[span['style']] += 1
parsed_css_style.append((cssutils.parseStyle(span['style']), span))
most_common_style = style_counts.most_common(1)[0][0]
most_common_css_style = cssutils.parseStyle(most_common_style)
css_styles = natsort.natsorted(parsed_css_style, key=lambda x: x[0].fontSize, reverse=True)
print "Styles larger than most common font size of {} are:".format(most_common_css_style.fontSize)
for css_style, span in takewhile(lambda x: x[0].fontSize != most_common_css_style.fontSize, css_styles):
print " Font size: {:5} Text: {}".format(css_style.fontSize, span.text)
在显示的示例中,最常用的字体大小是12px,因此还有3个大于此的其他条目如下:
Styles larger than most common font size of 12px are:
Font size: 18px Text: 5
Font size: 15px Text: 6
Font size: 14px Text: 2
要安装,您可能需要:
pip install natsort
pip install cssutils
请注意,这确实假设您网站上使用的字体大小是一致的,它无法比较不同的字体指标,只能比较数值。