Первое, что нужно отметить:
Ваш xpath слишком конкретен. Классы CSS в HTML не всегда имеют надежный порядок. class1 class2
может в конечном итоге стать class2 class1
или даже иметь какой-то сломанный синтаксис, такой как конечные пробелы: class1 class2
.
Когда вы напрямую сопоставляете свой xpath с [@class="class1 class2"]
, есть большая вероятность, что он потерпит неудачу. Вместо этого вы должны попытаться использовать функцию contains
.
Второе:
У вас есть маленькая ошибка в вашем cities_name
xpath. В теле html это> h2> текст, а в вашем коде он обратный h2>a>text
Так что, как говорится, мне удалось заставить его работать с этими селекторами css и xpath:
$ parsel "https://www.zomato.com/directory"
> p.mb10>a>h2::text +first
Adelaide
> p.mb10>a>h2::text +len
736
> -xpath
switched to xpath
> //p[contains(@class,"mb10")]/a/h2/text() +first
Adelaide
> //p[contains(@class,"mb10")]/a/h2/text() +len
736
parselcli - https://github.com/Granitosaurus/parsel-cli