创建一个CSS选择器以单次定位多个ID

时间:2018-12-21 12:35:03

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

我已经在脚本中定义了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)

2 个答案:

答案 0 :(得分:0)

您可以这样做:

.rest-list-information div span

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

答案 1 :(得分:0)

如果您只是想从HTML中获取所有“跨度”文本,则以下内容就足够了:

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

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