winform 逐个获取网页的标题 大家好,winform 中, listbox中有数个网址,请问怎么逐个读取listbox中的网址,并获得该网页的标题呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 循环遍历ListBox中的网址,然后逐个访问呀。获取标题再保存出来吧 根据URL提取页面的Title,根据网页的charset自动判断Encoding using System;using System.Net;using System.Text;using System.Text.RegularExpressions;class Program{ // 获取网页的HTML内容,根据网页的charset自动判断Encoding static string GetHtml(string url) { return GetHtml(url, null); } // 获取网页的HTML内容,指定Encoding static string GetHtml(string url, Encoding encoding) { byte[] buf = new WebClient().DownloadData(url); if (encoding != null) return encoding.GetString(buf); string html = Encoding.UTF8.GetString(buf); encoding = GetEncoding(html); if (encoding == null || encoding == Encoding.UTF8) return html; return encoding.GetString(buf); } // 根据网页的HTML内容提取网页的Encoding static Encoding GetEncoding(string html) { string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)"; string charset = Regex.Match(html, pattern).Groups["charset"].Value; try { return Encoding.GetEncoding(charset); } catch (ArgumentException) { return null; } } // 根据网页的HTML内容提取网页的Title static string GetTitle(string html) { string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>"; return Regex.Match(html, pattern).Groups["title"].Value.Trim(); } // 打印网页的Encoding和Title static void PrintEncodingAndTitle(string url) { string html = GetHtml(url); Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html)); } // 程序入口 static void Main() { PrintEncodingAndTitle("http://www.msdn.net/"); PrintEncodingAndTitle("http://www.cnblogs.com/"); PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/"); PrintEncodingAndTitle("http://www.csdn.net/"); PrintEncodingAndTitle("http://news.163.com/"); }}/**//* 程序输出:[] [MSDN: Microsoft Developer Network][System.Text.UTF8Encoding] [博客园 - 程序员的网上家园][System.Text.UTF8Encoding] [空间/IV - 博客园][System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台][System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻]*/ 楼上的办法就可以,先获得网页客户端源文件,再用正则表达式进行提取,只是速度可能会很慢还有一种方法就是创建一个隐藏的webBrowser控件来获取private void Form1_Load(object sender, EventArgs e){ this.webBrowser1.Url = new Uri("http://***"); this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); }void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){ MessageBox.Show(this.webBrowser1.Document.Title);} 有 iframe 的话,就不行了 wuyi8808 不好意思啊,第一次提问,给分给错了。十分感谢wuyi8808 !!!!!!!!!! c# 结构体转byte[] 包含中文出错 datagridview和sql存储图片问题 C# 怎么修改父窗体继承下来方法! 如何获取DataGridView单元格修改前的值 socket传输的问题 C# 中使用OpenDataSource()函数 新手弱智问题,DataGrid的数据DataSource重置 【求助】我需要在webservices上实现即时通信的一个功能,各位大师有没有什么办法可以实现的。感谢。 NPOI导出Excel时内存溢出 try{} catch{}问题 VS2005 C#如何设置光标在第一个textBox? 多线程中如何invoke获得控件的属性值,紧急求解!
using System.Net;
using System.Text;
using System.Text.RegularExpressions;class Program
{
// 获取网页的HTML内容,根据网页的charset自动判断Encoding
static string GetHtml(string url)
{
return GetHtml(url, null);
} // 获取网页的HTML内容,指定Encoding
static string GetHtml(string url, Encoding encoding)
{
byte[] buf = new WebClient().DownloadData(url);
if (encoding != null) return encoding.GetString(buf);
string html = Encoding.UTF8.GetString(buf);
encoding = GetEncoding(html);
if (encoding == null || encoding == Encoding.UTF8) return html;
return encoding.GetString(buf);
} // 根据网页的HTML内容提取网页的Encoding
static Encoding GetEncoding(string html)
{
string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
string charset = Regex.Match(html, pattern).Groups["charset"].Value;
try { return Encoding.GetEncoding(charset); }
catch (ArgumentException) { return null; }
} // 根据网页的HTML内容提取网页的Title
static string GetTitle(string html)
{
string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>";
return Regex.Match(html, pattern).Groups["title"].Value.Trim();
} // 打印网页的Encoding和Title
static void PrintEncodingAndTitle(string url)
{
string html = GetHtml(url);
Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html));
} // 程序入口
static void Main()
{
PrintEncodingAndTitle("http://www.msdn.net/");
PrintEncodingAndTitle("http://www.cnblogs.com/");
PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/");
PrintEncodingAndTitle("http://www.csdn.net/");
PrintEncodingAndTitle("http://news.163.com/");
}
}
/**//* 程序输出:
[] [MSDN: Microsoft Developer Network]
[System.Text.UTF8Encoding] [博客园 - 程序员的网上家园]
[System.Text.UTF8Encoding] [空间/IV - 博客园]
[System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台]
[System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻]
*/
还有一种方法就是创建一个隐藏的webBrowser控件来获取
private void Form1_Load(object sender, EventArgs e)
{
this.webBrowser1.Url = new Uri("http://***");
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show(this.webBrowser1.Document.Title);
}
十分感谢wuyi8808 !!!!!!!!!!