Я хочу найти все определения стилей в файле XHTML с помощью lxml.etree.findall
. Это может быть так же просто, как
elems = tree.findall('link[@rel="stylesheet"]') + tree.findall('style')
Но проблема с определениями стиля CSS заключается в том, что порядок имеет значение, например.
<link rel="stylesheet" type="text/css" href="/media/css/first.css" />
<style>body:{font-size: 10px;}</style>
<link rel="stylesheet" type="text/css" href="/media/css/second.css" />
если содержимое тега style
применяется после правил в двух тегах link
, результат может полностью отличаться от того, где правила применяются в порядке определения.
Итак, как бы я сделал поиск, который включает в себя как link[@rel="stylesheet"]
, так и style
?
Возможно использование XPATH:
data = """<link rel="stylesheet" type="text/css" href="/media/css/first.css" />
<style>body:{font-size: 10px;}</style>
<link rel="stylesheet" type="text/css" href="/media/css/second.css" />
"""
from lxml import etree
h = etree.HTML(data)
h.xpath('//link[@rel="stylesheet"]|//style')
[<Element link at 97a007c>,
<Element style at 97a002c>,
<Element link at 97a0054>]
tree.findall
, мне не пришло в голову, чтоtree.xpath
может работать. Спасибо!findall
содержало предикат, который я не знал, что он примет. Я не вернулся, чтобыfindall
сfindall
пор, как познакомился сxpath
.