【问题标题】:Read data from a webpage in D?从 D 中的网页读取数据?
【发布时间】:2013-01-01 15:43:36
【问题描述】:

如何简单地打开一个 url 并用 D 从网页中读取数据? (如果需要使用标准的 lib 功能,我更喜欢 phobos 而不是 tango)

【问题讨论】:

    标签: d phobos


    【解决方案1】:

    curl 在标准库中。您可以像这样轻松获取 url:

    import std.net.curl;
    string content = get("d-lang.appspot.com/testUrl2");
    

    http://dlang.org/phobos/std_net_curl.html#get

    如果需要解析html,我写了一个dom库,很擅长。 https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff

    获取 dom.d 和 characterencodings.d 然后你可以:

    import arsd.dom;
    auto document = new Document();
    document.parseGarbage(content); // content is from above, the html string
    
    writeln(document.title); // the <title> contents
    auto paragraph = document.querySelector("p");
    if(paragraph is null)
         writeln("no paragraphs in this document");
    else
         writeln("the first paragraph is: ", paragraph.innerText);
    

    等等。如果您使用过 javascript dom api,这非常相似(尽管也扩展了很多方式)。

    【讨论】:

    • 不幸的是,对于上面的纯“std.net.curl”代码示例,我遇到了 dmd 生成的链接器顺序的问题,对于 linux,在这里讨论:forum.dlang.org/thread/… 和这里:@ 987654324@ ...但显然尚未在 2.0.61 中修复 :(
    • 好的,所以我通过编译解决了这个问题:“dmd [filename] -L-lphobos2 -L-lcurl”。 (哦,好吧,我还需要添加一个演员表,这在文档中没有提到:“string s = cast(string) get("[url]");" ... 因为 get 返回一个 char[ ] 而不是字符串。)
    • 字符串 s = get("[url]").idup;?
    【解决方案2】:

    我认为 std.net.curl 绑定是您最好的选择,特别是它的 get/post 方法(示例在文档中):http://dlang.org/phobos/std_net_curl.html#get

    毕竟,curl 是专门为这类任务设计的,绑定是 phobos 的一部分。

    【讨论】:

    • 啊,谢谢! (不过,不幸的是,它还不是 Ubuntu/LinuxMint 存储库中 phobos 版本的一部分:/)
    • 如果您无法使用火卫一,在我的 githib(此处的另一个答案中的链接)中,您可以获取我的 curl.d 并使用 "string content = curl("example.com/foo.html") ;" 如果你根本没有 libcurl,我还有一个带有简单 get() 函数的 http.d。
    • 由于某种原因,我得到“错误:在 () 之前预期的函数,而不是 void 类型的模块 curl”,我的小程序:“import curl; string s = curl("example.org" );",并将 curl.d 与我的其他 .d 文件放在同一个文件夹中......有什么提示吗?
    • 使用“import arsd.curl;”而不仅仅是导入 curl;。同样在编译时,将所有文件放在 dmd 命令行:“dmd yourfile.d curl.d”以避免链接器错误。
    • Samuel,啊,比你最有可能使用来自基本 repos 的 gdc,4.4 之一?它必须有一个相当旧的 phobos 版本,并且具有当前 D/phobos 的错误修复速度我真的建议直接从开发人员那里获得最新版本,除非有特定要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多