我试图从 Medium.com 获取最新的帖子,例如,我转到这里
https://medium.com/circle-blog/latest?format=json
但是当我复制并粘贴整个内容时JSON 到 JSONEditorOnline.org 时,我收到错误消息
Error: Parse error on line 1:
])}while(1);</x>{"su
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got ']'
我意识到错误是由于前面的随机内容造成的
])}while(1);</x>
那么我如何使用 Python 删除它?
删除后,我想将其转储到JSON 文件
with open('medium.json', 'w') as json1:
json1.write(json.dumps(JSONWITHWHILE(1)REMOVED))
我该如何做呢?
Medium.com 在 URL 中添加
?format=json
时不会返回有效的 JSON 响应。它通过在实际 JSON 数据之前添加 JavaScript 代码来实现这一点。要使用 Python 提取 JSON 数据,可以使用如下正则表达式:
import re
import requests
import json
def get_medium_posts(url):
"""从给定的 Medium URL 中提取 JSON 数据。"""
response = requests.get(url)
response.raise_for_status()
# 使用正则表达式提取 JSON 数据
match = re.search(r'({.+})', response.text)
if match:
json_data = json.loads(match.group(1))
return json_data
else:
raise ValueError("找不到有效的 JSON 数据。")
# 例如,要获取来自 https://medium.com/circle-blog/latest 的帖子:
url = "https://medium.com/circle-blog/latest?format=json"
posts = get_medium_posts(url)
# 现在可以访问 posts 字典中的 JSON 数据
# 例如,要打印第一个帖子的标题:
print(posts['payload']['posts'][0]['title'])
# 可以将 JSON 数据保存到文件中:
with open('medium.json', 'w') as f:
json.dump(posts, f, indent=2) # 使用 indent 使其更具可读性
这段代码首先使用
requests.get()
获取给定 URL 的内容。然后,它使用正则表达式
({.+})
搜索第一个出现的
{
和最后一个出现的
}
之间的文本,这标志着实际 JSON 数据的开始和结束。如果找到匹配项,则使用
json.loads()
将提取的字符串解析为 Python 字典。
此方法允许从 Medium.com URL 中有效地提取和处理 JSON 数据,而无需担心不必要的 JavaScript 代码。
标签:python,web-scraping From: 52978113