html – 为什么Haskell不能处理特定网站的字符?

前端之家收集整理的这篇文章主要介绍了html – 为什么Haskell不能处理特定网站的字符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否可以编写一个Haskell程序,以便根据需要检查一些小说的更新,而我正在使用的网站是 this.我在显示内容时出现问题(在ma​​c el capitan上).简单的代码如下:
import Network.HTTP

openURL :: String -> IO String
openURL = (>>= getResponseBody) . simpleHTTP . getRequest

display :: String -> IO ()
display = (>>= putStrLn) . openURL

然后,当我在ghci上显示“http://www.piaotian.net/html/7/7430/”时,会出现一些奇怪的字符;第一行看起来像这样:

<title>×ß½øÐÞÏÉ×îÐÂÕ½Ú,×ß½øÐÞÏÉÎÞµ¯´°È«ÎÄÔĶÁ_Æ®ÌìÎÄѧ</title>
<Meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<Meta name="keywords" content="×ß½øÐÞÏÉ,×ß½øÐÞÏÉ×îÐÂÕ½Ú,×ß½øÐÞÏÉÎÞµ¯´° Æ®ÌìÎÄѧ" />
<Meta name="description" content="Æ®ÌìÎÄѧÍøÌṩ×ß½øÐÞÏÉ×îÐÂÕ½ÚÃâ·ÑÔĶÁ£¬Ç뽫×ß½øÐÞÏÉÕ½ÚĿ¼¼ÓÈëÊղط½±ãÏ´ÎÔĶÁ,Æ®ÌìÎÄѧС˵ÔĶÁÍø¾¡Á¦ÔÚµÚһʱ¼ä¸üÐÂС˵×ß½øÐÞÏÉ£¬Èç·¢ÏÖδ¼°Ê±¸üУ¬ÇëÁªÏµÎÒÃÇ¡£" />
<Meta name="copyright" content="×ß½øÐÞÏÉ°æȨÊôÓÚ×÷ÕßÎáµÀ³¤²»¹Â" />
<Meta name="author" content="ÎáµÀ³¤²»¹Â" />
<link rel="stylesheet" href="/scripts/read/list.css" type="text/css" media="all" />
<script type="text/javascript">

我也试图下载如下文件

import Network.HTTP

openURL :: String -> IO String
openURL = (>>= getResponseBody) . simpleHTTP . getRequest

downloading :: String -> IO ()
downloading = (>>= writeFile fileName) . openURL

但下载文件后,就像在照片中:

如果我通过python(使用urllib)下载页面,则会正常显示这些字符.另外,如果我写一个中文HTML并解析它,那么似乎没有问题.因此,似乎问题出在网站上.但是,我看不到网站的字符和我写的字符之间有任何区别.

对此背后的理由的任何帮助都非常感激.

附:
python代码如下:

import urllib

urllib.urlretrieve('http://www.piaotian.net/html/7/7430/',theFic)

theFic = file_path

文件都很好,很好.

解决方法

由于您表示您对链接感兴趣,因此无需将GBK编码转换为Unicode.

这是一个版本,打印文档中的所有链接,如“123456.html”:

#!/usr/bin/env stack
{- stack
  --resolver lts-6.0 --install-ghc runghc
  --package wreq --package lens
  --package tagsoup
-}

{-# LANGUAGE OverloadedStrings #-}

import Network.Wreq
import qualified Data.ByteString.Lazy.Char8 as LBS
import Control.Lens
import Text.HTML.TagSoup
import Data.Char
import Control.Monad

-- match \d+\.html
isNumberHtml lbs = (LBS.dropWhile isDigit lbs) == ".html"

wanted t = isTagOpenName "a" t && isNumberHtml (fromAttrib "href" t)

main = do
  r <- get "http://www.piaotian.net/html/7/7430/"
  let body = r ^. responseBody :: LBS.ByteString
      tags = parseTags body
      links = filter wanted tags
      hrefs = map (fromAttrib "href") links
  forM_ hrefs LBS.putStrLn
原文链接:https://www.f2er.com/html/230891.html

猜你在找的HTML相关文章