Scrapy 如何检查给定元素中是否存在某个类

Har*_*son 0 python scrapy

<li class="a">category1</li>
<li>subcatergory1</li>
<li>subcatergory2</li>
<li class="a">category2</li>
<li>subcatergory1</li>
<li>subcatergory2</li>
Run Code Online (Sandbox Code Playgroud)

我正在遍历ul包含 2 种的li,一种有a类,一种没有。我想知道是否有一种现有的方法来检查a给定的类是否存在li,而不是提取类值并手动比较它。

for li in ul
    if (li has class:a)
        ....
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激。

you*_*ans 5

您可以在 XPath 中检查只有一个类的元素:

//li[@class='a']
Run Code Online (Sandbox Code Playgroud)

但这仅查找完全匹配。所以你可以试试:

//li[contains(@class, 'a')]
Run Code Online (Sandbox Code Playgroud)

虽然这也将匹配“noa”或“abig”。所以你的最终答案可能是:

//li[contains(concat(' ', @class, ' '), ' a ')]
Run Code Online (Sandbox Code Playgroud)

在 Scrapy 中,如果一个 Selector 匹配一些非零内容,它就会被评估为真。所以你应该能够写出类似的东西:

li_tag = response.xpath("//li[contains(concat(' ', @class, ' '), ' a ')]")
if li_tag: 
    print "Yes, I found an 'a' li tag on the page."
Run Code Online (Sandbox Code Playgroud)

主要答案:这里