python - 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;
}
解决方案
<script>
我想,该代码在标签内。在这种情况下,您可以使用:
model_code = response.xpath('//script').re_first('modelCode.*?"(.*)"')
一些技巧:
- 您不必编译正则表达式即可使用
.re_first()
/.re()
。 - 如果您使用括号,它将只返回其中的匹配组。
parsel
有关(从 xml 中提取数据的库) 的更多信息: httpsscrapy
://parsel.readthedocs.io/en/latest/usage.html
推荐阅读
- php - 如何使用相同的表格发送不同的电子邮件?
- c++ - 使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序
- c# - Hangfire使用MongoDB执行长时间运行的后台作业不断重启
- windbg - 在 Windows 上使用 QEMU 调试 UEFI
- python - python Django ORM 组并订购查询集
- go - 如何使用 go-twitter bot 上传媒体?
- wordpress - WordPress 将表单项列表添加到自定义管理页面
- r - 考虑到年份和 id 滞后变量
- c# - 将 C# 转换为 NodeJS(Sha1、消息摘要、使用私钥签名)
- android - RecyclerView 的内容偏移量