winform 逐个获取网页的标题

likehukai 2009-03-19 04:20:20
大家好,winform 中, listbox中有数个网址,请问怎么逐个读取listbox中的网址,并获得该网页的标题呢?
...全文
255 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
utopia54 2009-03-19
  • 打赏
  • 举报
回复
呵呵,空军的正则表达式,强大!
likehukai 2009-03-19
  • 打赏
  • 举报
回复
wuyi8808 不好意思啊,第一次提问,给分给错了。


十分感谢wuyi8808 !!!!!!!!!!
likehukai 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 endyli 的回复:]
楼上的办法就可以,先获得网页客户端源文件,再用正则表达式进行提取,只是速度可能会很慢
还有一种方法就是创建一个隐藏的webBrowser控件来获取
private void Form1_Load(object sender, EventArgs e)
{
this.webBrowser1.Url = new Uri("http://***");
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}

void webBrowser1_Docum…
[/Quote]


有 iframe 的话,就不行了
whowhen21 2009-03-19
  • 打赏
  • 举报
回复
楼上的厉害呀。
帮顶一下哈
huwen7565833 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyi8808 的回复:]
根据URL提取页面的Title,根据网页的charset自动判断Encoding


C# codeusing 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…
[/Quote]
帮顶
endyli 2009-03-19
  • 打赏
  • 举报
回复
楼上的办法就可以,先获得网页客户端源文件,再用正则表达式进行提取,只是速度可能会很慢
还有一种方法就是创建一个隐藏的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 2009-03-19
  • 打赏
  • 举报
回复
根据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] [新闻中心_网易新闻]
*/
whowhen21 2009-03-19
  • 打赏
  • 举报
回复
循环遍历ListBox中的网址,然后逐个访问呀。

获取标题再保存出来吧
根据原作 https://pan.quark.cn/s/4f00beb998b1 的源码改编 FacileMenu ==== 介绍 非常飘逸的 Qt 菜单控件,带有各种动画效果,用起来也十分方便。 无限层级,响应键盘、鼠标单独操作,自动切换日夜间模式或主题,支持单快捷键。 允许添加自定义 widget、layout,当做特殊的 QDialog 使用。 简单使用 放入源代码 将 文件夹放入 Qt 程序,pro 文件的 加上对应路径, 里的资源文件 (子菜单箭头)也导入,前缀别名为:(或按需修改);同理添加建议的色彩资源 文件需要添加 包含头文件 创建并显示菜单 常用操作 连续设置 子菜单 横向菜单 方式一:一口气添加 方式二:逐个添加 两种方式都支持横向布局 widget 添加标题 一个灰色文字的 QLabel,根据参数二会选择性添加一条分割线。 添加到标题上方(margin=4), 不添加分割线, 添加到标题下方。 默认为 ,不带分割线。 添加 QAction 支持在菜单关闭时自动 delete 传入的 action,避免内存泄漏(默认关闭) 添加 Widget/Layout 添加任意 widget 至菜单中,和菜单项并存,不占 的位置。 layout 同理。 添加单选菜单 如果要设置为checkable,请在创建时调用一次其以下任一方法: setCheckable(bool) / setChecked(bool) / check(bool) / uncheck(bool) 添加多选菜单 快速批量单选项 快速批量多选项 监听每一项改变的结果 极简批量多选项 直接读取多选项结果,而不是监听多选项每一项(也可以两者结合) 在中获取,即为选中项 菜单项 API 后,可直接设置菜单...

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧