使用lxml.cssselector查找内联样式

2 投票
3 回答
1932 浏览
提问于 2025-04-15 21:29

我刚接触这个库(其实对BeautifulSoup也不太熟悉,真遗憾),想做一件很简单的事情(通过内联样式搜索):

<td style="padding: 20px">blah blah </td>

我只想选择所有样式为"padding: 20px"的,但我似乎搞不定。所有的例子都在展示如何选择,比如:

for col in page.cssselect('td'):

但这对我帮助不大。

3 个回答

3

如果你更喜欢使用CSS选择器:

import lxml.html
data = """<td style="padding: 20px">blah blah </td>
<td style="padding: 21px">bow bow</td>
<td style="padding: 20px">buh buh</td>
"""
doc = lxml.html.document_fromstring(data)
for td in doc.cssselect('td[style="padding: 20px"]'):
   print td.text
4

其实,有个更好的方法:XPath。

import lxml.html
data = """<td style="padding: 20px">blah blah </td>
<td style="padding: 21px">bow bow</td>
<td style="padding: 20px">buh buh</td>
"""
doc = lxml.html.document_fromstring(data)
for col in doc.xpath("//td[@style='padding: 20px']"):
    print col.text

这个方法更简洁,而且速度也更快。

2

请注意,下面的回答中,Ruslan Spivaknosklo 提供了更好的解答。


import lxml.html
data = """<td style="padding: 20px">blah blah </td>
<td style="padding: 21px">bow bow</td>
<td style="padding: 20px">buh buh</td>
"""
doc = lxml.html.document_fromstring(data)
for col in doc.cssselect('td'):
    style = col.attrib['style']
    if style=='padding: 20px':
        print(col.text.strip())

打印

blah blah
buh buh

并且成功跳过了 bow bow

撰写回答