Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python标准库在html页面中嵌入干净的脚本_Python_Html_Json_Python 3.x_Urllib - Fatal编程技术网

如何使用python标准库在html页面中嵌入干净的脚本

如何使用python标准库在html页面中嵌入干净的脚本,python,html,json,python-3.x,urllib,Python,Html,Json,Python 3.x,Urllib,我正试图从sololearn站点备份我的代码。当然,我可以复制/粘贴它,但因为我想在其他代码中重复它,也为了学习,我想使用python代码,如果可能的话,只使用标准库 我在这里介绍更基本的尝试。我还一直在努力使用HTMLParser、html.entities、xml.etree,我尝试将响应解码为“utf-8”,以通过html.unescape()传递。结果总是肮脏的。 这种脏东西:\u003c!DOCTYPE html\u003e\r\n\u003chtml\u003e\r\n\u003c-

我正试图从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等等。。。我还尝试使用regex修改来处理脏结果,但我认为这是不可能的,因为代码可能包含不应该修改的故意元素,如“\r\n”。

似乎您得到了JSON编码的字符串。您可以使用
ast.literal\u eval()
()对字符串进行解码:

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编码的字符串。您可以使用
ast.literal\u eval()
()对字符串进行解码:

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>

看起来它正在工作,只有一件奇怪的事情,当我使用它时,与您显示的结果不同,每次有新行时,都会添加一个额外的新行。知道为什么吗?是的,两者都一样。我正在使用.decode(“utf-8”)@Cépagrave No-idea,然后在我的计算机上运行它正确打印的代码。可能是终端设置。还可以尝试按行打印,并在每行上使用
.strip()
。逐行打印解决方案效果很好!但糟糕的是,我刚刚读到使用条款禁止使用刮削。我将编辑并隐藏url。看起来它正在工作,只有一件奇怪的事情,当我使用它时,与您显示的结果不同,每次有换行时都会添加一个额外的换行。知道为什么吗?是的,两者都一样。我正在使用.decode(“utf-8”)@Cépagrave No-idea,然后在我的计算机上运行它正确打印的代码。可能是终端设置。还可以尝试按行打印,并在每行上使用
.strip()
。逐行打印解决方案效果很好!但糟糕的是,我刚刚读到使用条款禁止使用刮削。我将编辑并隐藏url。