Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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_Regex_Haskell_Optimization - Fatal编程技术网

Python 获取和转换HTML文档

Python 获取和转换HTML文档,python,html,regex,haskell,optimization,Python,Html,Regex,Haskell,Optimization,我想创建一个脚本,下载一个网页,转换一些代码(从HTML到TeX),然后将其打印到一个文件中。我得到了前两部分,但我不知道如何将其打印到文件中 我使用正则表达式,但我听说过很多关于正则表达式的不好的地方,但是…我怎么能用这些HTML解析器做到这一点呢 我获取一个URL列表和一个正则表达式列表(第一项是搜索,第二项是替换)。我循环遍历所有url,并将每个url(通过正则表达式转换后)保存到字典中的一个条目中。从这里开始,我想做的是将字典中的每个条目打印到不同的文件中 顺便说一句,如果你想用另一种语

我想创建一个脚本,下载一个网页,转换一些代码(从HTML到TeX),然后将其打印到一个文件中。我得到了前两部分,但我不知道如何将其打印到文件中

我使用正则表达式,但我听说过很多关于正则表达式的不好的地方,但是…我怎么能用这些HTML解析器做到这一点呢

我获取一个URL列表和一个正则表达式列表(第一项是搜索,第二项是替换)。我循环遍历所有url,并将每个url(通过正则表达式转换后)保存到字典中的一个条目中。从这里开始,我想做的是将字典中的每个条目打印到不同的文件中

顺便说一句,如果你想用另一种语言展示一个不同的解决方案来展示它的优点,那么毫无疑问,我正在寻找不同的语言:)如果你用Python来回答,你肯定可以使用一个好的解决方案来优化它

无论如何,这是我的密码。任何建议都很好(我对这种语言和编程都是全新的)

导入urllib
进口稀土
outputpath=“~/Desktop/foo/”
网页页=”http://learnyouahaskell.com/"
名称列表=[“简介”,
“开始”]
URL列表=[]
对于范围内的i(len(名称列表)):
追加(网页页面+名称列表[i])

regexlist=[[r“^Watch,“你不能用regex解析html”我知道人们都来了。但对我来说,这很管用(我不会解析成吨的网页,只解析少数带有有限数量标签的网页,等等)。如果不合适,我希望这些人提供一个替代方案:)可能更适合您可能可以轻松解决此问题,这是一个文档转换应用程序和Haskell库。其他库(如)可以帮助您在转换之前调整HTML。要将结果打印到文件,请参阅下面的问题n:注意,“你不能用正则表达式解析html”的人来了,我知道。但对我来说,这是可行的(我不会解析成吨的网页,只是一些,带有有限数量的标签,等等)。如果不合适,我希望这些人提供一个替代方案:)可能更适合您可能可以轻松解决此问题,这是一个文档转换应用程序和Haskell库。其他库(如)可以帮助您在转换之前调整HTML。要将结果打印到文件,请参阅下面的问题n:
import urllib
import re

outputpath = "~/Desktop/foo/"
webpath  = "http://learnyouahaskell.com/"
namelist = [ "introduction",
             "starting-out" ]
urllist = []
for i in range(len(namelist)):
  urllist.append(webpath + namelist[i])

regexlist = [ [ r"^<!DOCTYPE([\s\S]+?)<h1" , "\\startweb\n\n<h1" ],
              [ r"</p>[\s\n]*?<div class[\s\S]+?</script>\n</body>\n</html>", "</p>\n\n\\stopweb"],
              [ r"<h1.*?>(.+?)</h1>" , r"\chapter{\1}\n" ],
              [ r"<h2>(.+?)</h2>" , r"\section{\1}\n" ],
              [ r"<i>(.+?)</i>" , r"\emph{\1}" ],
              [ r"<em>(.+?)</em>" , r"\\bold{\1}" ],
              [ "<p>", "\n" ], [ "</p>", "\n" ],
              [ "<pre name=\"code\" class=\"haskell: (.+?)\">([\\s\\S]+?)\n?</pre>" , r"\n\starthaskell[\1]\2\n\stophaskell\n" ],
              [ "\n\n\\haskell" , "\n\haskell" ],
              [ "<span class=\"fixed\">(.+?)</span>" , r"\\typehaskell{\1}"],
              [ "<span class=\"label function\">(.+?)</span>" , r"\\haskellfunction{\1}"],
              [ "<span class=\"(class label|label class)\">(.+?)</span>" , r"\\haskellclass{\1}"],
              [ "<span class=\"label type\">(.+?)</span>" , r"\\haskelltype{\1}"],
              [ "<img src=\"(http://s3.amazonaws.com/lyah/)(.+?).png\" (alt|class)=\"(.+?)\" (class|alt)=\"(.+?)\" width=\"(\d+)\" height=\"(\d+)\">" , r"\n\placeimage[\2]{url=\1\2.png,\3=\4,\5=\6,width=\7pt,height=\8pt}\n" ],
              [ "<a href=\"(.+?)\">(.+?)</a>" , r"\\url[\1]{\2}" ],
              [ "<a.*?></a>", "" ],
              [ "#" , "\#" ],
              [ "&amp;" , "&" ],
              [ "&hellip;" , "\dots" ],
              [ "&gt;" , ">" ],
              [ "&lt;" , "<" ]
            ]

finaldoc = {}
for i in range(len(namelist)):
  htmlfile = urllib.urlopen(urllist[i])
  htmltext = htmlfile.read()
  for regex in regexlist:
    searchpattern  = regex[0]
    replacepattern = regex[1]
    htmltext = re.sub(searchpattern, replacepattern, htmltext)
  finaldoc[namelist[i]] = htmltext