首页 > 解决方案 > scrapy - 如何使用正则表达式检索变量值

问题描述

我想检索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;

}

标签: pythonregexscrapy

解决方案


<script>我想,该代码在标签内。在这种情况下,您可以使用:

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

一些技巧:

  • 您不必编译正则表达式即可使用.re_first()/ .re()
  • 如果您使用括号,它将只返回其中的匹配组。
  • parsel有关(从 xml 中提取数据的库) 的更多信息: httpsscrapy ://parsel.readthedocs.io/en/latest/usage.html

推荐阅读