如何将托管在 GitHub 上的 JavaScript 数组解析为 Python 列表?
Posted
技术标签:
【中文标题】如何将托管在 GitHub 上的 JavaScript 数组解析为 Python 列表?【英文标题】:How can I parse a JavaScript array hosted on GitHub into a Python list? 【发布时间】:2022-01-21 19:23:56 【问题描述】:我有一个用 Python 编写的 Discord 机器人,我想添加一个功能,让它立即删除它找到的任何网络钓鱼链接。
我查找了已知网络钓鱼域的列表,发现this on GitHub.
但问题是这是一个带有一个大数组的 JS 文件,而我的机器人是 100% Python。
我可以复制这个列表,但是我失去了它不断更新的优势,所以如果可能的话,我想直接从 GitHub 读取域。
我不确定如何获取并将其解析为 Python 列表。
在 *** 上环顾四周,人们建议将数据解析为 JSON,或者使用正则表达式,但不幸的是我还没有完全理解。
指导会有所帮助 - 或者也许您有更好的做事方式,而不是这种方式!谢谢
【问题讨论】:
美汤在这里有点矫枉过正,你不觉得吗? 【参考方案1】:这是一种方法(容易失败,绝对不是推荐的方法):
import requests
RAW_DATA_LINK = "https://raw.githubusercontent.com/nikolaischunk/discord-phishing-links/main/domain-list.js"
def get_data():
response = requests.get(RAW_DATA_LINK)
data = response.content.decode()
data = data.replace("const suspiciousDomains = ", "").replace(";", "") # or just data[26:-2]
return eval(data)
get_data()
将为您提供该文件中所有链接的列表。
您还可以在发出请求时尝试使用会话...
同样,如果您可以控制该文件,只需将其存储为 json,如果您无法控制,则使用正则表达式可能会更好。
【讨论】:
谢谢!我将其转换为use aiohttp instead 以避免额外导入requests
。您能否详细说明为什么这容易失败/为什么实施它会是一个问题?只要 repo 和此文件存在,这将始终有效,对吗?
即使该文件存在,该文件也有可能发生变化。假设名称从suspiciousDomains
更改为Domains
,这会破坏这个程序。 (尽管您可以通过使用 split 而不是 replace 来适应这种类型的更改)但我认为您不会在使用正则表达式时遇到这些类型的问题,您可以使用表达式 \[.*\]
来提取所需的数据。此外,对从 Internet 下载的数据使用 eval 存在安全风险。
@SujalSingh 使用 eval 是 huge security risk,尤其是作者试图从互联网上抓取数据【参考方案2】:
免责声明:我无法看到原始的 js 文件,因此可能存在一些不准确之处。编写此答案是为了提供使用 eval()
的替代方法,因为它存在巨大的安全风险。阅读Eval really is dangerous。
我假设 javascript 文件是这样的:
const suspiciousDomains =
"domains": [
"tinyurl.com/yyw8sy9b",
"tinyurl.com/yyyz9xdg",
"token-bit.com"
]
;
import requests
import json
RAW_DATA_LINK = "https://raw.githubusercontent.com/nikolaischunk/discord-phishing-links/main/domain-list.js" // the now dead link
def get_data():
# credit to @Sujal Singh
data = response.content.decode().replace("const suspiciousDomains = ", "").replace(
";", "") # or just data[26:-2]
# use json.loads() instead
return json.loads(data)
json.loads()
不直接评估字符串,而是解析字符串。
要了解json.loads()
做了什么,您可以阅读this。
【讨论】:
以上是关于如何将托管在 GitHub 上的 JavaScript 数组解析为 Python 列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在托管在 GitHub 上的 Python 脚本中保密开发人员密钥
如何在托管在 GitHub 上的 Python 脚本中保密开发人员密钥
从托管在 GitHub 上的 Spring Cloud Config Server 访问的 repo 的身份验证问题