【问题标题】:python regular expressions to jsonpython正则表达式转json
【发布时间】:2018-04-03 12:10:13
【问题描述】:

我有以下python代码;

links = []
links.append(re.findall(b'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', body))
return simplejson.dumps({"link": links})

运行时它会在 HTML 页面中返回一个未定义的值

任何解释为什么会发生这种情况的帮助都会很棒

【问题讨论】:

标签: python html json python-3.x


【解决方案1】:

你在正确的轨道上。看起来你正在为所有链接抓取一个 html 正文,对吧?当然还有其他方法可以做到这一点,但这是我使用此页面所做的一个示例,以您的代码为基础,并为简洁起见删除了其他内容。

注意我改变的两件事:我使用的是 json,而不是 simplejson。另一个,我只是将链接列表分配给 re.findall 的返回值。无需进行追加;这只会给你一个列表。

>>> import json
>>> import re
>>> 
>>> body = """
... <body class="question-page new-topbar">
...     <a href="https://stackoverflow.com" class="-logo js-gps-track" data-gps-track="top_nav.click({is_current:false, location:2, destination:8})">
...     <a href="https://stackoverflow.com">current community</a>
...     <a href="https://chat.stackoverflow.com" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:6 })">chat</a>
...     <a href="https://stackoverflow.com/users/logout" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:8 })">log out</a>
...     <a href="https://stackoverflow.com" class="current-site-link site-link js-gps-track" data-id="1" data-gps-track="site_switcher.click({ item_type:3 })">
...     <a href="https://meta.stackoverflow.com" class="site-link js-gps-track" data-id="552" data-gps-track="site.switch({ target_site:552, item_type:3 }),site_switcher.click({ item_type:4 })">
... </body>
... """
>>> 
>>> links = re.findall(b'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', body)
>>> json.dumps(links)
'["https://stackoverflow.com", "https://stackoverflow.com", 
"https://chat.stackoverflow.com", 
"https://stackoverflow.com/users/logout", 
"https://stackoverflow.com", "https://meta.stackoverflow.com"]'

现在,如果您尝试将序列化的 JSON 返回到前端,一切看起来都不错。你还没有展示你的前端代码,没有描述你正在使用什么模板库,你正在使用什么 python web 框架等等,所以我们只能猜测它可能出错的地方。

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2013-01-18
    • 2019-06-22
    相关资源
    最近更新 更多