一个用于解析Web链接(RFC 5988)的C#解析器

12
3个回答

10

0
这是我使用过的一个扩展方法:
public static Dictionary<string, string> ParseLinksHeader(
    this HttpResponseMessage response)
{
    var links = new Dictionary<string, string>();

    response.Headers.TryGetValues("link", out var headers);
    if (headers == null) return links;

    var matches = Regex.Matches(
        headers.First(),
        @"<(?<url>[^>]*)>;\s+rel=""(?<link>\w+)\""");
    
    foreach(Match m in matches)
        links.Add(m.Groups["link"].Value, m.Groups["url"].Value);

    return links;
}

-2
HTML Agility Pack,使用正确的查询{{SelectNodes}}。
using HtmlAgilityPack;

namespace WebScraper
{
    class Program
    {
        static void Main(string[] args)
        {
            HtmlWeb web = new HtmlWeb();
            HtmlDocument doc =web.Load(url);
            foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@Link]"))
            {
            }

3
谢谢,但是不,那不是我想要的。我指的是HTTP协议级别的“Link”头部,如http://tools.ietf.org/html/rfc5988中所述。 - Jørn Wildt
你是如何获取HTML文档的?如果是WebResponse,那么Headers枚举应该包含LINK。 - weismat
2
从HTTP头中获取字符串没有问题。问题在于解析字符串的内容 - 将其分割成包含URL、rel-type、标题等部分的部分。 - Jørn Wildt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接