2015-01-25 20 views
9

Próbuję pobrać div's z klasą: "produkt". Problem polega na tym, że niektóre elementy div z klasą "produktu" mają również klasę "produkt-mały". Więc kiedy używam xpath('//div[@class='product']'), przechwytuje ona tylko elementy div z jedną klasą, a nie z wieloma. Jak mogę to zrobić za pomocą scrapy?Scrapy grab div z wieloma klasami?

Przykład:

  • Połowy: <div class='product'>
  • nie łapie: <div class='product product-small'>

Odpowiedz

7

Można to również rozwiązać za pomocą xpath. Po prostu potrzebne do korzystania contains():

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

Chociaż, tak, opcja CSS selector jest bardziej zwarty i czytelny.

+0

Twój selektor xpath również będzie przechwytywał elementy z klasą "not-a-product". –

+0

@barraponto tak, ale dane wejściowe do bieżącego problemu nie zawierają elementów z klasą "not-a-product". Dzięki. – alecxe

+0

Selektor został zmodyfikowany w celu dokładnego dopasowania nazw klas (np. Http://doc.scrapy.org/en/1.1/topics/selectors.html#when-querying-by-class-consider-using-css) – oschlueter