【问题标题】:How to get the parent tag using selector?如何使用选择器获取父标签?
【发布时间】:2018-04-11 13:27:25
【问题描述】:

在 css 选择器中有什么方法可以用来解析 parent 标记名称,在本例中为 tr

这里是搜索的元素:

html_content="""
<tr>
    <td>Hi!!!!</td>
</tr>
"""

如果我考虑上面的元素,解析父名称tr的css选择器应该是什么?

from lxml.html import fromstring
root = fromstring(html_content)
item = root.cssselect("td")[0].text
print(item)

【问题讨论】:

  • 您是否考虑过使用beautifulsoup ?它有一个内置的parent 标签。
  • 是的,我也喜欢使用BeautifulSoup,我知道那里有一个选项。但是,它不支持 psudoelement 搜索模式,如 :contains() 所以,我喜欢坚持使用 lxml 库。谢谢。

标签: python python-3.x web-scraping css-selectors


【解决方案1】:

AFAIK 有类似的语法

*:has(>td)

lxml.html 尚不支持

您可以使用内置的getparent() 方法解决问题

item = root.cssselect("td")[0]
print(item.getparent().tag)

【讨论】:

  • 你是迄今为止我遇到的最好的老师。谢谢安德森爵士。这就是我一直在寻找的。​​span>
【解决方案2】:

使用lxml.html.HtmlElement.xpath()方法:

import lxml.html

html_content="""
<tr>
    <td>Hi!!!!</td>
</tr>
"""

root = lxml.html.fromstring(html_content)
item = root.xpath("td/..")[0]

print(item.tag)  # tr

  • td/.. - xpath 表达式,.. 指父节点

【讨论】:

  • 感谢 RomanPerekhrest 的回答。我知道我可能会使用xpath 得到任何答案,这就是为什么我什至没有添加lxml 标签。我想有任何与 css 选择器相关的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多