2015-01-25 4 views
9

Ich versuche Divs mit der Klasse zu bekommen: 'Produkt'. Das Problem ist, einige der divs mit der Klasse 'product' haben auch die Klasse 'product-small'. Wenn ich also xpath('//div[@class='product']') verwende, erfasst es nur die divs mit einer Klasse und nicht multiple. Wie kann ich das mit Scrapy machen?Scrapy Grab div mit mehreren Klassen?

Beispiel:

  • Schnäpper: <div class='product'>
  • nicht erwischt: <div class='product product-small'>

Antwort

7

Dies könnte auch mit xpath gelöst werden. Sie braucht nur contains() zu verwenden:

//div[contains(concat(' ', normalize-space(@class), ' '), ' product ')] 

Obwohl, ja, die CSS selector Option ist kompakter und lesbar.

+0

Ihr Xpath-Selektor würde auch Elemente mit der 'not-a-product' Klasse aufnehmen. –

+0

@barraponto ja, aber die Eingabe in das aktuelle Problem enthält keine Elemente mit 'not-a-product' Klasse. Vielen Dank. – alecxe

+0

Der Selektor wurde bearbeitet, um eine genaue Übereinstimmung der Klassennamen zu erreichen (siehe http://doc.scrapy.org/en/1.1/topics/selectors.html#when-querying-by-class-consider-using-css). – oschlueter