创建一个 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)
我在脚本中定义了 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)