.Net C# 抓取网页链接时无法获取日文汉字(仅 unicode 值)
.Net C# Can't get Japanese Kanji (only the unicode values) when crawling web links
这是一个 WinForms 应用程序:
我还没有找到适合我的解决方案,尽管人们在 SO 上确实有类似的问题。
我有以下代码:
private static ArrayList GetURLS(string url)
{
ArrayList alLinks = new ArrayList();
HtmlDocument doc = new HtmlWeb().Load(url);
var linkTags = doc.DocumentNode.Descendants("link");
var linkedPages = doc.DocumentNode.Descendants("a")
.Select(a => a.GetAttributeValue("href", null))
.Where(u => !string.IsNullOrEmpty(u))
.Where(u => !u.StartsWith("#")); // Don't include empty links and those that start with a #
foreach (string links in linkedPages)
{
if (IsValidUri(links))
{
if (!alLinks.Contains(links)) alLinks.Add(links.ToLower());
}
}
return alLinks;
}
网络爬虫 - 无处不在,一旦到达非英语网站就会出错。而不是(在日语页面中)将 url 获取为 Kanji/Hiragana 等,而是 returns %3e unicode 类型编码。这很好,因为我们也可以抓取它们。
然而,最终用户面临着可怕的外观 urls!
所以,对于这个问题:
- 如何使用提供的代码的修改在抓取期间获得正确编码的链接?
class System.Web.HttpUtility
有一个方法 UrlDecode
可以完成这个:
var decoded = System.Web.HttpUtility.UrlDecode(links.ToLower());
alLinks.Add(decoded);
示例:
var url = "http://en.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97";
Console.WriteLine(System.Web.HttpUtility.UrlDecode(url));
// http://en.wikipedia.org/wiki/漢字
这是一个 WinForms 应用程序:
我还没有找到适合我的解决方案,尽管人们在 SO 上确实有类似的问题。
我有以下代码:
private static ArrayList GetURLS(string url)
{
ArrayList alLinks = new ArrayList();
HtmlDocument doc = new HtmlWeb().Load(url);
var linkTags = doc.DocumentNode.Descendants("link");
var linkedPages = doc.DocumentNode.Descendants("a")
.Select(a => a.GetAttributeValue("href", null))
.Where(u => !string.IsNullOrEmpty(u))
.Where(u => !u.StartsWith("#")); // Don't include empty links and those that start with a #
foreach (string links in linkedPages)
{
if (IsValidUri(links))
{
if (!alLinks.Contains(links)) alLinks.Add(links.ToLower());
}
}
return alLinks;
}
网络爬虫 - 无处不在,一旦到达非英语网站就会出错。而不是(在日语页面中)将 url 获取为 Kanji/Hiragana 等,而是 returns %3e unicode 类型编码。这很好,因为我们也可以抓取它们。
然而,最终用户面临着可怕的外观 urls!
所以,对于这个问题:
- 如何使用提供的代码的修改在抓取期间获得正确编码的链接?
class System.Web.HttpUtility
有一个方法 UrlDecode
可以完成这个:
var decoded = System.Web.HttpUtility.UrlDecode(links.ToLower());
alLinks.Add(decoded);
示例:
var url = "http://en.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97";
Console.WriteLine(System.Web.HttpUtility.UrlDecode(url));
// http://en.wikipedia.org/wiki/漢字