在。net下提取网页的文本 我想用C# 提取网页中的文本文字,请问要用什么方法啊?找了很多好像有关于IHTMLDocument2 和 Htmldocument 希望有好心人能提供完整点的代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 webBrowser1.Document.Body.InnerText 提取什么样的文字?包含HTML??还是什么. using System.IO;using System.Net;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;request = WebRequest.Create("http://www.sina.com.cn") as HttpWebRequest;response = request.GetResponse() as HttpWebResponse;instream = response.GetResponseStream();sr = new StreamReader(instream, Encoding.UTF8);//返回结果网页(html)代码 return sr.ReadToEnd(); 如: <td></td>中间的文本文字啊 三楼的应该是提取整个网页吧,这样的我已经实现了。还有devsdk说的用正则我已经做过了,是能实现。但是我想先构造DOM树,再提取文本。 终于自己弄出来了,其实也挺简单,然后下面我把代码共享一下,谢谢解答的人。我是先扫描浏览器,然后将开着的网页截取,用IHTMLDocument3 这个类做的内容提取,代码如下:SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass(); string filename; foreach (SHDocVw.InternetExplorer ie in shellWindows) { filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower(); if (filename.Equals("iexplore") || filename.Equals("ttraveler")) { Console.WriteLine("Web Site: {0}", ie.LocationURL); mshtml.IHTMLDocument2 htmlDoc = ie.Document as mshtml.IHTMLDocument2; Console.WriteLine("文件 Snippet: {0}", ((htmlDoc != null) ? htmlDoc.body.outerHTML.Substring(0, 100) : "***Failed***")); Console.WriteLine("{0}{0}", Environment.NewLine); mshtml.IHTMLDocument3 htmlDoc3 = ie.Document as mshtml.IHTMLDocument3; mshtml.IHTMLElementCollection hec = htmlDoc3.getElementsByTagName("TD"); foreach (mshtml.IHTMLElement he in hec) { Console.WriteLine(he.innerText); } // mshtml.IHTMLElement he = (mshtml.IHTMLElement)hec.item(0, 0); Console.ReadKey(); } } 可以试试用正则表达式来分析文本!.net库里的正则表达式还是很好用的! 呵呵,已经用过了,但是觉得有点死板,不知道是不是同意我的说法。比如说我想提取具体的标签"td"下的文本,我只能先提取都是 <td>的所有标签,然后去掉html代码,但是我要提取很多不同类型的文本,这样的话不同html网页框架是不一样的啊。包含文本的标签也是不一样的啊。我就要写很多判断和分析。感觉这样不灵活。不知道大虾有没有好的建议呢?? C#怎么设置本地电脑摄像头分辨率 gategridvieW中显示密码的问题 在先等待,Rdlc报表显示问题 WPF Combobox数据绑定后自动选择项的问题 [急]怎么用SQL的 xp_cmdshell 远程上传文件 VC中 namespace 嵌套出现问题 初学C#遇到一个小问题,请教!!! 为什么sdk中的东西都无法运行? 请教高手有关media开发的问题 在类中要使用application,应该使用哪个命名空间? 请问如何在编码中显示oledb联接输入框 Socket 问题 远程服务器强迫关闭了一个现有链接 unit test中,protected方法要不要测试一下?
webBrowser1.Document.Body.InnerText
包含HTML??还是什么.
using System.Net;Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
request = WebRequest.Create("http://www.sina.com.cn") as HttpWebRequest;
response = request.GetResponse() as HttpWebResponse;
instream = response.GetResponseStream();
sr = new StreamReader(instream, Encoding.UTF8);
//返回结果网页(html)代码
return sr.ReadToEnd();
string filename;
foreach (SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
if (filename.Equals("iexplore") || filename.Equals("ttraveler"))
{
Console.WriteLine("Web Site: {0}", ie.LocationURL);
mshtml.IHTMLDocument2 htmlDoc = ie.Document as mshtml.IHTMLDocument2; Console.WriteLine("文件 Snippet: {0}", ((htmlDoc != null) ? htmlDoc.body.outerHTML.Substring(0, 100) : "***Failed***"));
Console.WriteLine("{0}{0}", Environment.NewLine); mshtml.IHTMLDocument3 htmlDoc3 = ie.Document as mshtml.IHTMLDocument3;
mshtml.IHTMLElementCollection hec = htmlDoc3.getElementsByTagName("TD");
foreach (mshtml.IHTMLElement he in hec)
{
Console.WriteLine(he.innerText);
}
// mshtml.IHTMLElement he = (mshtml.IHTMLElement)hec.item(0, 0);
Console.ReadKey();
}
}
比如说我想提取具体的标签"td"下的文本,我只能先提取都是 <td>的所有标签,然后去掉html代码,
但是我要提取很多不同类型的文本,这样的话不同html网页框架是不一样的啊。包含文本的标签也是不一样的啊。我就要写很多判断和分析。
感觉这样不灵活。不知道大虾有没有好的建议呢??