【问题标题】:How to use regex scraping json values [duplicate]如何使用正则表达式抓取 json 值
【发布时间】:2019-12-13 06:19:37
【问题描述】:

我一直在尝试学习正则表达式,但又一次陷入困境。

我要抓取的是以下值:

var preloadedItems = [
{
  "id": "8971",
  "permalink": "https://www.randomsite1.com"
},
{
  "id": "8943",
  "permalink": "https://www.randomsit2e.com"
},
{
  "id": "8944",
  "permalink": "https://www.randoms3ite.com"
},
{
  "id": "8950",
  "permalink": "https://www.random4site.com"
},
{
  "id": "8910",
  "permalink": "https://www.random5site.com"
},
{
  "id": "8915",
  "permalink": "https://www.rando6msite.com"
}
];

#代码比较长,这里就不贴了。

我通过做得到的

p = re.compile(r'var preloadedItems = \[(.*?)\];', re.DOTALL)
data = p.findall(req.text)[0]

它返回我发布的 json 的全部值。但是我只想将所有永久链接刮到一个列表中,我尝试这样做

p = re.compile(r'var preloadedItems = \[(.*?)\];', re.DOTALL)
data = json.loads(p.findall(r.text)[0]).items()

但我确实收到Extra data: line 1 column 2657 (char 2656) 的错误

我想知道如何将所有永久链接抓取到一个列表中?


更新:

我的想法是首先使用正则表达式刮取 json 值,以便以后能够将其用作 json.loads(regexValue) - 这意味着我使用正则表达式来获取值 Regexjson = {....},然后使用 json。加载(正则表达式)...

【问题讨论】:

  • 你想匹配什么?那个 json 中没有 var preloadedItems,你为什么要 json.loadsing 一个正则表达式 findall 结果?
  • 哇!我忘了加上那个哎哟!将立即添加
  • Regex 不适用于此类情况,只需使用 JSON 解析器并获取值
  • 嗯,但我确实需要先抓取该值,然后将其用作 JSON 解析器?不?我的计划是使用正则表达式来抓取 JSON 值,然后使用 JSON Parser。
  • @Thrillofit86 您的编辑使问题与以前大不相同。您是否正在尝试抓取 JavaScript 文件?

标签: python regex


【解决方案1】:

我需要移动您的正则表达式分组 (( )) 才能使其正常工作。我还将findall(...) 切换为search(...) 假设您只提取一个条目。

import re
import json

with open('test.txt', 'r') as f:
    text = f.read() # Getting your text from a make shift file

p = re.compile(r'var preloadedItems = (\[.*?\]);', re.DOTALL)
data = p.search(text)
if data:
    json_output = json.loads(data[1])
    print(json.dumps(json_output, indent=2))

输出:

[
  {
    "id": "8971",
    "permalink": "https://www.randomsite1.com"
  },
  {
    "id": "8943",
    "permalink": "https://www.randomsit2e.com"
  },
  {
    "id": "8944",
    "permalink": "https://www.randoms3ite.com"
  },
  {
    "id": "8950",
    "permalink": "https://www.random4site.com"
  },
  {
    "id": "8910",
    "permalink": "https://www.random5site.com"
  },
  {
    "id": "8915",
    "permalink": "https://www.rando6msite.com"
  }
]

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2013-08-21
    • 2012-12-07
    • 2012-12-30
    相关资源
    最近更新 更多