Web scraping 如何使用HTML5解析页面并找到所有链接?

Web scraping 如何使用HTML5解析页面并找到所有链接?,web-scraping,rust,html5ever,Web Scraping,Rust,Html5ever,我想用html5ever解析字符串格式的HTML,并找到这个HTML中的所有链接。但是,我知道,RcDom已经不存在了。您必须创建一个实现TokenSink的结构,然后创建一个新的Tokenizer,其中您的结构就是sink。当使用Tokenizer::feed()进行解析时,它将通过TokenSink传递所有令牌 此代码改编自,因此是Apache/MIT许可的。html5ever是一个为浏览器构建的复杂库,它表明,API似乎是为适应UTF-8以外的编码而设计的 此代码仅从stdin解析。如果您

我想用html5ever解析字符串格式的HTML,并找到这个HTML中的所有链接。但是,我知道,
RcDom
已经不存在了。

您必须创建一个实现
TokenSink
的结构,然后创建一个新的
Tokenizer
,其中您的结构就是
sink
。当使用
Tokenizer::feed()
进行解析时,它将通过
TokenSink
传递所有令牌

此代码改编自,因此是Apache/MIT许可的。html5ever是一个为浏览器构建的复杂库,它表明,API似乎是为适应UTF-8以外的编码而设计的

此代码仅从stdin解析。如果您想按原样使用它,请使用pipe
curl
like so
curlhttps://stackoverflow.com/questions/59461279/how-do-i-parse-a-page-with-html5ever-and-find-all-the-links |货物运输
。 当我这样做时,我得到如下输出

link to: #
link to: https://stackoverflow.com
link to: #
link to: /teams/customers
...
extern板条箱html5ever;
使用std::default::default;
使用std::io;
使用html5ever::卷须::*;
使用html5ever::tokenizer::BufferQueue;
使用html5ever::tokenizer::{StartTag,TagToken};
使用html5ever::tokenizer::{Token,TokenSink,TokenSinkResult,tokenizer,TokenizerOpts,};
使用html5ever::interface::QualName;
使用html5ever:{ns,名称空间\ url,LocalName};
#[衍生(复制、克隆)]
结构标记打印机{}
令牌打印机的impl令牌接收器{
类型句柄=();
fn进程\标记(&mut self,标记:标记,\行\编号:u64)->TokenSinkResult{
让link_name=QualName::new(
没有一个
ns!(),
LocalName::from(“href”),
);
匹配令牌{
标记令牌(标记)=>{
如果tag.kind==StartTag&&tag.name.to_string()==a{
设attrs=tag.attrs;
attr中的attr{
如果attr.name==link\u name{
println!(“链接到:{}”,属性值);
}
}
}
},
_ => {
},
}
TokenSinkResult::继续
}
}
fn main(){
设sink=TokenPrinter{};
让mut chunk=ByteTendril::new();
io::stdin()。读取卷须(&mut块)。展开();
让mut input=BufferQueue::new();
input.push_back(chunk.try_reinterpret::().unwrap());
让mut tok=Tokenizer::new(
下沉
TokenizerOpts::default(),
);
let ux=tok.feed(&mut input);
断言!(input.is_empty());
tok.end();
}

这个问题很有可能会被解决,因为您没有表现出任何试图解决它的努力。基本上,回答这个问题:你试过什么?