Поиск встроенного стиля с помощью lxml.cssselector - PullRequest
2 голосов
/ 12 апреля 2010

Новичок в этой библиотеке (к сожалению, не знаком с BeautifulSoup), пытаясь сделать что-то очень простое (поиск по встроенному стилю):

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

Я просто хочу выбрать все tds, где style = "padding: 20px", но я не могу понять это. Все примеры показывают, как выбрать td, например:

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

но это мне мало помогает.

Ответы [ 3 ]

3 голосов
/ 12 апреля 2010

Ну, есть лучший способ: 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

Это аккуратнее, а также быстрее.

3 голосов
/ 12 апреля 2010

Если вы предпочитаете использовать селекторы 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 голосов
/ 12 апреля 2010

Обратите внимание, что и Руслан Спивак и носкло дали лучшие ответы ниже.


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.

...