创建一个 css 选择器以一次性定位多个 ID

Creating a css selector to locate multiple ids in a single-shot

我在脚本中定义了 css 选择器以获取 span 元素中的文本 和我正在相应地得到它们。但是,我尝试的方式肯定是乱七八糟的。我只是使用逗号分隔不同的 css 选择器,让脚本理解我在这个或那个之后。

如果我选择 xpath 我可以使用 'div//span[.="Featured" or .="Sponsored"]' 但如果是 css 选择器我找不到任何类似的东西来达到同样的目的。我知道使用 'span:contains("Featured"),span:contains("Sponsored")' 我可以得到文本,但中间像往常一样有逗号。

使用 css 选择器(逗号除外)定位元素(在不同 id 中)的理想方法是什么?

到目前为止我的尝试:

from lxml.html import fromstring

html = """
<div class="rest-list-information">
    <a class="restaurant-header" href="/madison-wi/restaurants/pizza-hut">
        Pizza Hut
    </a>
    <div id="featured other-dynamic-ids">
        <span>Sponsored</span>
    </div>
</div>
<div class="rest-list-information">
    <a class="restaurant-header" href="/madison-wi/restaurants/salads-up">
        Salads UP
    </a>
    <div id="other-dynamic-ids border">
        <span>Featured</span>
    </div>
</div>
"""

root = fromstring(html)
for item in root.cssselect("[id~='featured'] span,[id~='border'] span"):
    print(item.text)

你可以这样做:

.rest-list-information div span

但我认为将逗号视为混乱是个坏主意。您不会找到很多没有逗号的样式表。

如果您只是想从 HTML 中获取所有 'span' 文本,那么以下内容就足够了:

root_spans = root.xpath('//span')

for i, root_spans in enumerate(root_spans):
    span_text = root_spans.xpath('.//text()')[0]
    print(span_text)