Используйте регулярные выражения на селекторах Scrapy - PullRequest
0 голосов
/ 09 мая 2019

Я собираю данные с этой страницы Google :

Чтобы получить отзывы, у меня нет проблем, поскольку все они в классе под названием: "review-full-text""тогда я просто использую этот xpath, чтобы получить их:

review.xpath('//*[@class="review-full-text"]//text()').extract()

Но нужно также получить ответы, и в этом случае имя класса не соответствует, например, для первого обзораответ находится в классе:

LfKETd r-id3h0OaXd7RA

Но для второго имени класса:

LfKETd r-iGpfKJm1EL2o

У которого первая часть имени фиксирована "LfKETd r-"остальные изменения для каждого ответа.Можно ли использовать регулярное выражение внутри xpath, например: «LfKETd r -. *», Или каким-либо другим способом сопоставить имя класса для каждого ответа?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Хотя XPath 1.0 , используемый Scrapy (через Parsel), изначально не поддерживает регулярные выражения, Parsel добавляет два расширения в XPath 1.0, и одно из них добавляетподдержка регулярных выражений .

В частности, она вводит функцию re:test, которая работает аналогично встроенной функции contains, но задает регулярное выражение Python вместоподстрока в качестве второго параметра.

1 голос
/ 09 мая 2019

Вот xpath, который вы должны использовать.

//div[starts-with(@class,'LfKETd r-')]

Используя это, вы всегда проверяете первую часть класса и не беспокоитесь о динамической части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...