【问题标题】:lxml.cssselect CSSSelector doesn't support attributeslxml.cssselect CSSSelector 不支持属性
【发布时间】:2015-09-03 05:03:16
【问题描述】:

我正在尝试解析 HTML 页面并获取具有特定属性的项目。我正在使用lxml.cssselect 来完成这项工作。

我似乎无法让它与属性选择器一起使用。例如,以下选择器:p[itemprop="articleBody"]this page 上不返回任何内容。在 Firefox 或 Chrome 中使用相同的选择器是可行的。

当我尝试没有属性的选择器时,它们确实有效。

我使用 html 翻译器创建 CSSSelector。

lxml.cssselect 根本不支持这种选择器吗?我在文档中找不到任何对它的引用。

【问题讨论】:

  • 您介意发布您的代码吗?

标签: python css-selectors lxml


【解决方案1】:

我没有lxml.cssselect 的专业知识(我已经快速完成,甚至无法设置元素树,因此无法复制您的确切问题)。但是,我使用可能对您有用的等效 lxml 方法取得了成功。

from lxml import html
import requests

url = 'http://abcnews.go.com/US/wireStory/man-jail-writing-racist-graffiti-refugees-homes-33488053'
page = requests.get(url)

tree = html.fromstring(page.text)
p_elements = tree.cssselect('p[itemprop="articleBody"]')
print(p_elements)

输出:

[<Element p at 0xa503ae8>,
 <Element p at 0xa503db8>,
 <Element p at 0xa503bd8>,
 <Element p at 0xa54b1d8>,
 <Element p at 0xa54b0e8>,
 <Element p at 0xa54b138>,
 <Element p at 0xa54b188>]

通常,当使用lxml 时,我发现通过 XPath 选择元素比通过 CSS 选择器灵活得多。

【讨论】:

  • 啊!这是我正在处理的其他人的代码。原来他们使用 lxml.html.clean.clean_html 来清理 HTML。默认行为(他们使用的)是删除所有“不安全”属性,包括这个。
猜你喜欢
  • 2021-07-15
  • 2011-10-25
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2019-09-12
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多