使用lxml.cssselector查找内联样式
我刚接触这个库(其实对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 Spivak 和 nosklo 提供了更好的解答。
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
。