python - 如何使用 python 标准库在 html 页面中嵌入干净的脚本
问题描述
我正在尝试从 sololearn 网站备份我的代码。我当然可以复制/粘贴它,但是因为我想为其他代码重复它,也为了学习目的,我想用 python 代码来做,并且尽可能只使用标准库。
我在这里介绍更基本的尝试。我也一直在努力使用 HTMLParser、html.entities、xml.etree,我尝试将响应解码为“utf-8”,以通过 html.unescape() 传递它。结果总是很脏。这种脏:\u003c!DOCTYPE html\u003e\r\n\u003chtml\u003e\r\n\u003c!--\r\有时少,但从来不干净
from urllib.request import urlopen
import re
url = "https://code.sololearn.com/************/#"
with urlopen(url) as response:
page = str(response.read())
code = re.search(r'window.code = "(.*)";.*window.cssCode',page).group(1)
print(code)
目标是备份我的文件,以干净的函数形式将它们写入文件,代码可以是 html+css+js、python、c 等...我也尝试使用正则表达式修改来处理脏结果,但是我认为这是不可能的,因为代码可能包含不应修改的故意元素,例如“\r\n”。
解决方案
似乎你得到了 JSON 编码的字符串。您可以使用ast.literal_eval()
( doc ) 来解码字符串:
from ast import literal_eval
from urllib.request import urlopen
import re
url = "https://code.sololearn.com/************/#"
with urlopen(url) as response:
page = response.read().decode('utf-8')
code = re.search(r'window.code = "(.*)";.*window.cssCode',page, flags=re.DOTALL).group(1)
print(literal_eval('"' + code + '"'))
印刷:
<!DOCTYPE html>
<html>
<!--
If you're interested in the tools used here:
to display a partition:
http://www.vexflow.com/
to make it sound:
https://tonejs.github.io/
-->
<head>
<link href="https://fonts.googleapis.com/css?family=Annie+Use+Your+Telescope&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tone/13.8.12/Tone.js"></script>
<script src="https://unpkg.com/vexflow/releases/vexflow-min.js"></script>
<title>Melody Generator</title>
</head>
<body>
<div id="wrapper">
<div id="popup">
<div id="description">description gonna be here</div>
<div id="choice"></div>
</div>
<div id="input" class="blur">
<div id="melody">
<h1>Melody</h1>
<textarea id="melo_num" class="text_input" placeholder="Enter two words..."></textarea>
<p id="melo_rebased"></p>
</div>
<div id="rhythm">
<h1>Rhythm</h1>
<textarea id="rhyt_num" class="text_input" placeholder="...hear some magic !"></textarea>
<p id="rhyt_rebased"></p>
</div>
</div>
<div id="partition" class="blur"></div>
<div id="controls" class="blur">
<div id="back" class="control">back</div>
<div id="play" class="control">play</div>
<div id="stop" class="control">stop</div>
</div>
<div id="current" class="blur"></div>
<p></p>
<div id="settings" class="blur">
<div id="loop" class="blur">loop
<div class="twinkle lamp" id="loop_lamp"></div>
</div>
<div id="root" class="blur">root
<div class="lamp" id="root_lamp"></div>
</div>
<div id="mode" class="blur">mode
<div class="lamp" id="mode_lamp"></div>
</div>
<div id="range" class="blur">range
<div class="lamp" id="range_lamp"></div>
</div>
<div id="rhythm" class="blur">rhythm
<div class="lamp" id="rhythm_lamp"></div>
</div>
<div id="convert" class="blur">convert
<div class="lamp" id="convert_lamp"></div>
</div>
<div id="volume" class="blur slider_box">
volume
<input id="sound_vol" class="slider" type="range" min="-50" max="0" value="-10">
</div>
<div id="speed" class="blur slider_box">
speed
<input id="speed_lvl" class="slider" type="range" min="0" max="200" value="100">
</div>
<div id="sustain" class="blur slider_box">
sustain
<input id="sustain_lvl" class="slider" type="range" min="0" max="200" value="100">
</div>
<div id="demo" class="blur">demo
<div class="lamp" id="demo_lamp"></div>
</div>
</div>
<p></p>
</div>
</body>
</html>
或使用json.loads()
(文档):
import json
print(json.loads('"' + code + '"'))
推荐阅读
- android - 谷歌登录可以只用于登录吗?
- javascript - 如何在 JavaScript 中计算表格列?
- c# - 如何以干净和正确的方式缩短长参数列表
- python - 在矩阵中的文本中选择一个字母
- ruby - Windows 上的 Ruby:Require 未被识别为内部或外部命令
- codeigniter - SMTP 邮件未在 Codeigniter 中发送
- spring-boot - 在 spring boot kafka 的一个监听器中消费多个主题
- entity-framework - 将 EF 迁移重置为全新状态 - 未生成唯一索引
- ios - UITextView 字体大小在 iPad Mini 中非常小,但在模拟器上正常
- android - 添加功能以检查gps是否打开后GPS位置无法获取数据