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

时间:2016-06-15 03:41:18

标签: python scrapy

<li class="a">category1</li>
<li>subcatergory1</li>
<li>subcatergory2</li>
<li class="a">category2</li>
<li>subcatergory1</li>
<li>subcatergory2</li>

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

for li in ul
    if (li has class:a)
        ....

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

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

//li[@class='a']

但这只是寻找完全匹配。所以你可以试试:

//li[contains(@class, 'a')]

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

//li[contains(concat(' ', @class, ' '), ' a ')]

在Scrapy中,如果Selector与某些非零内容匹配,则会将其评估为true。所以你应该能够写出类似的内容:

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

主要答案:here

答案 1 :(得分:0)

li.css('。a')应该这样做 要么 li.xpath( '@ ID')。提取物()

如果你只需要class = a元素而不是 ul.css('li.a')会这样做。