2016-06-15 3 views
0
<li class="a">category1</li> 
<li>subcatergory1</li> 
<li>subcatergory2</li> 
<li class="a">category2</li> 
<li>subcatergory1</li> 
<li>subcatergory2</li> 

Ich bin durch eine ul Looping, die zwei Arten von li enthält, hat eine a Klasse und man tut es nicht. Ich frage mich, gibt es eine vorhandene Methode, um zu überprüfen, ob die a Klasse in einem gegebenen li existiert, anstatt Klassenwert zu extrahieren und es manuell zu vergleichen.Scrapy Wie überprüfen, ob bestimmte Klasse in einem bestimmten Element existiert

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

Alle Gedanken würden geschätzt werden.

Antwort

0

li.css ('a. ') Sollte es oder li.xpath tun (' @ id'). Extrahieren()

wenn Sie Klasse müssen = A-Elemente als ul.css ("li.a") wird es tun.

1

Sie könnten für ein Element überprüfen mit nur einer Klasse wie folgt in XPath:

//li[@class='a'] 

Aber das sieht nur exakte Übereinstimmungen. So können Sie es versuchen:

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

Obwohl dies auch "noa" oder "abig" übereinstimmen wird. So Ihre endgültige Antwort wird wahrscheinlich sein:

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

In Scrapy, ein Selector als wahr ausgewertet wird, wenn es einige Nicht-Null-Inhalt übereinstimmt. So sollten Sie in der Lage sein, etwas zu schreiben wie:

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

Haupt Antwort: here

Verwandte Themen