scrapy - Как получить значение переменной с помощью регулярных выражений - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу получить значение var modelCode.Я сделал функцию регулярного выражения, как это, но она не работает вообще.Я разместил структуру страницы ниже. Кто-нибудь может мне помочь, пожалуйста?

regex2 = re.compile(r'"var modelCode"\s*:\s*(.+?\})', re.DOTALL)
source_json3 = response.xpath("//script[contains(., 'if(pageTrackName == 'product detail' || pageTrackName == 'generic product details')')]/text()").re_first(regex2)
source_json3 = re.sub(r'//[^\n]+', "", source_json3)

Структура страницы:

var pageTrackName = digitalData.page.pageInfo.pageTrack;
if(pageTrackName == "product detail" || pageTrackName == "generic product details"){ 
   var modelCode = "GT-P5100TSABTU";
   var displayName = "Galaxy Tab 2 (10.1, 3G)".replace(/(<([^>]+)>)/gi, "");
   digitalData.product.model_code = modelCode;
   digitalData.product.displayName = displayName;
   pageName += ":" + modelCode;

}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Этот код находится внутри тега <script>, я полагаю.В этом случае вы можете использовать:

model_code = response.xpath('//script').re_first('modelCode.*?"(.*)"')

Некоторые советы:

  • Вам не нужно компилировать регулярное выражение для использования .re_first() / .re().
  • Если вы используете скобки, он вернет только группу совпадений внутри них.
  • Дополнительная информация о parsel (библиотеках scrapy для извлечения данных из xml): https://parsel.readthedocs.io/en/latest/usage.html
0 голосов
/ 21 сентября 2018

Попробуйте Regex: (?<=var modelCode = ")(.+)(?=";)

Демо

нам не нужно делать re.sub, так как мы получаем значение modelCode как совпадение.

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