gpt4 book ai didi

http - 从维基百科下载 pdf 文件

转载 作者:可可西里 更新时间:2023-11-01 15:17:37 26 4
gpt4 key购买 nike

维基百科在每篇文章上都提供了一个链接(位于打印/导出的左侧),可以将文章下载为 pdf 格式。我写了一个小的 Haskell 脚本,它首先获取维基百科链接并输出渲染链接。当我将渲染 url 作为输入时,我得到的是空标签,但浏览器中的相同 url 提供了下载链接。

有人能告诉我如何解决这个问题吗? ideone 上的格式化代码.

import Network.HTTP
import Text.HTML.TagSoup
import Data.Maybe

parseHelp :: Tag String -> Maybe String
parseHelp ( TagOpen _ y ) = if any ( \( a , b ) -> b == "Download a PDF version of this wiki page" ) y
then Just $ "http://en.wikipedia.org" ++ snd ( y !! 0 )
else Nothing


parse :: [ Tag String ] -> Maybe String
parse [] = Nothing
parse ( x : xs )
| isTagOpen x = case parseHelp x of
Just s -> Just s
Nothing -> parse xs
| otherwise = parse xs


main = do
x <- getLine
tags_1 <- fmap parseTags $ getResponseBody =<< simpleHTTP ( getRequest x ) --open url
let lst = head . sections ( ~== "<div class=portal id=p-coll-print_export>" ) $ tags_1
url = fromJust . parse $ lst --rendering url
putStrLn url
tags_2 <- fmap parseTags $ getResponseBody =<< simpleHTTP ( getRequest url )
print tags_2

最佳答案

如果您尝试通过诸如 wget 之类的外部工具请求 URL,您将看到维基百科不直接提供结果页面。它实际上返回一个 302 Moved Temporarily 重定向。

当在浏览器中输入这个 URL 时,它会很好,因为浏览器会自动跟随重定向。但是,simpleHTTP 不会。顾名思义,simpleHTTP 非常简单。它不处理 cookie、SSL 或重定向之类的事情。

您需要使用 Network.Browser模块代替。它提供了对如何完成请求的更多控制。特别是 setAllowRedirects函数将使它自动遵循重定向。

这是一个快速但不完善的函数,用于将 URL 下载到支持重定向的 String 中:

import Network.Browser

grabUrl :: String -> IO String
grabUrl url = fmap (rspBody . snd) . browse $ do
-- Disable logging output
setErrHandler $ const (return ())
setOutHandler $ const (return ())

setAllowRedirects True
request $ getRequest url

关于http - 从维基百科下载 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7354156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com