标签: html5ever

使用hyper和html5ever在流中解析HTML页面内容

我正在尝试解析HTTP请求的HTML响应.我正在使用hyper来处理请求,使用html5ever进行解析.HTML将非常大,我不需要完全解析它 - 我只需要从标签中识别一些数据,所以我更愿意流式传输它.从概念上讲,我想做的事情如下:

# bash
curl url | read_dom

/* javascript */
http.get(url).pipe(parser);
parser.on("tag", /* check tag name, attributes, and act */)
Run Code Online (Sandbox Code Playgroud)

到目前为止我想出的是:

extern crate hyper;
extern crate html5ever;

use std::default::Default
use hyper::Client;
use html5ever::parse_document;
use html5ever::rcdom::{RcDom};

fn main() {
    let client = Client::new();

    let res = client.post(WEBPAGE)
        .header(ContentType::form_url_encoded())
        .body(BODY)
        .send()
        .unwrap();

    res.read_to_end(parse_document(RcDom::default(),
      Default::default().from_utf8().unwrap()));
}
Run Code Online (Sandbox Code Playgroud)

看起来read_to_end我想调用读取字节的响应的方法,但我不清楚如何将它传递给HTML文档阅读器......如果这是可能的话.

说明parse_document要使用的文档,from_utf8或者from_bytes输入是否以字节为单位(即它).

看来我需要从响应中创建一个接收器,但这就是我被困住的地方.我也不清楚如何创建事件来监听标签启动,这是我感兴趣的.

我看过这个html5ever的例子似乎做了我想做的事情并且走了DOM,但是我不能让这个例子本身运行 - 要么它已经过时了,要么卷须/ html5ever太新了.这似乎也解析了整个HTML而不是流,但我不确定.

是否有可能对我们想要对这些库的当前实现做什么?

rust hyper html5ever

11
推荐指数
1
解决办法
2393
查看次数

如何使用html5ever解析页面,修改DOM并将其序列化?

我想解析一个网页,在某些位置插入锚点并再次渲染修改后的DOM,以便为Dash生成docsets .这可能吗?

从html5ever中包含的示例中,我可以看到如何读取HTML文件并执行穷人的HTML输出,但我不明白如何修改RcDom我检索到的对象.

我想看到一个片段插入一个锚元素(<a name="foo"></a>)到一个RcDom.

注意:这是一个关于Rust和html5ever的问题......我知道如何用其他语言或更简单的HTML解析器.

rust servo html5ever

8
推荐指数
1
解决办法
1225
查看次数

标签 统计

html5ever ×2

rust ×2

hyper ×1

servo ×1