C# 规范化各种类型的链接(URL)

C# 规范化各种类型的链接(URL),c#,hyperlink,httpwebrequest,C#,Hyperlink,Httpwebrequest,我正在尝试提取HTML文档中所有href链接的列表,然后这些链接将被送入System.Net.HttpWebRequest以获取这些页面的HTML文档。基本上是做一个爬虫 我使用正则表达式从页面中提取链接列表:href=“(.*?” 当从页面中提取的链接不是严格意义上的“”,并且我从HTML文档中提取的各种类型的链接看起来像这样时,就会出现问题:(虚构的示例) www.example.com/products/productname /产品/productname(相关链接) 我需要一种

我正在尝试提取HTML文档中所有
href
链接的列表,然后这些链接将被送入System.Net.HttpWebRequest以获取这些页面的HTML文档。基本上是做一个爬虫

我使用正则表达式从页面中提取链接列表:
href=“(.*?”

当从页面中提取的链接不是严格意义上的“”,并且我从HTML文档中提取的各种类型的链接看起来像这样时,就会出现问题:(虚构的示例)

  • www.example.com/products/productname
  • /产品/productname(相关链接)
我需要一种方法将所有这些不同类型的链接规范化为HttpWebRequest接受的格式


过去3天我一直在搜索,运气不好。

你已经尝试了什么?我能想到的唯一解决方案是将字符串与预定义的内容匹配,这会很快变得凌乱和凌乱,这就是为什么我尝试寻找更好的选项。但我的研究毫无结果,所以我必须承认我没有太多东西可以展示。我发现最好的方法是:但这对相对链接没有帮助。我现在还不会将此作为答案发布,因为我知道它有缺陷(例如,./abc.htm`在HTML中是一个有效的相对URL,但它会抛出一个错误),并将稍后尝试进一步处理。也许你可以为你的用户案例改进它。如果您在我之前这样做,请添加更新版本作为答案。另外,可能还有更好的方法来处理域检查(而不仅仅是检查a。)。另外,我不确定是否应该将
www.
放在主机的开头,因为并非所有站点都为
www
http://www.example.com
,但可以。请参阅有关StackOverflow的讨论。还要注意的是,
www.example.com/products/productname
是一个看起来像绝对的相对URL。