使用 lxml.cssselector 查找内联样式

发布于 2024-08-28 16:02:37 字数 297 浏览 4 评论 0原文

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

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

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

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

但这对我没有多大帮助。

New to this library (no more familiar with BeautifulSoup either, sadly), trying to do something very simple (search by inline style):

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

I just want to select all tds where style="padding: 20px", but I can't seem to figure it out. All the examples show how to select td, such as:

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

but that doesn't help me much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

故事未完 2024-09-04 16:02:37

嗯,有一个更好的方法: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

这更整洁,也更快。

Well, there's a better way: 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

That is neater and also faster.

神回复 2024-09-04 16:02:37

如果您更喜欢使用 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

If you prefer to use CSS selectors:

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
空袭的梦i 2024-09-04 16:02:37

请注意,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

Note that both Ruslan Spivak and nosklo have given better answers below.


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())

prints

blah blah
buh buh

and manages to skip bow bow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文