2

这个库的新手(遗憾的是,对 BeautifulSoup 也不熟悉),尝试做一些非常简单的事情(按内联样式搜索):

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

我只想选择 style="padding: 20px" 的所有 tds,但我似乎无法弄清楚。所有示例都展示了如何选择 td,例如:

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

但这对我帮助不大。

4

3 回答 3

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

那更整洁也更快。

于 2010-04-12T03:21:52.263 回答
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
于 2010-04-12T05:00:51.423 回答
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

于 2010-04-12T02:40:43.537 回答