这个库的新手(不用再熟悉BeautifulSoup),试图做一些非常简单的事情(按内联样式搜索):
<td style="padding: 20px">blah blah </td>
我只想选择所有tds,其中style =“padding:20px”,但我似乎无法弄明白。所有示例都显示了如何选择td,例如:
for col in page.cssselect('td'):
但这对我没什么帮助。
答案 0 :(得分:3)
嗯,有一种更好的方法: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
这更整洁,也更快。
答案 1 :(得分: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
答案 2 :(得分: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
。