我想阅读没有html标签和标题的网站文字。我只需要在网络浏览器中显示的文字。
我不需要这样
<html>
<body>
bla bla </td><td>
bla bla
<body>
<html>
我只需要文本“bla bla bla bla”。
我使用了webclient和httpwebrequest方法获取HTML内容并拆分收到的数据,但这是不可能的,因为如果我更改网站,标签可能会发生变化。
那么有没有办法以网页方式只显示网站上显示的文字?
答案 0 :(得分:5)
您需要使用特殊的HTML解析器。获取此类非常规语言内容的唯一方法。
答案 1 :(得分:4)
以下是使用HtmlAgilityPack进行操作的方法。
首先是您的示例HTML:
var html = "<html>\r\n<body>\r\nbla bla </td><td>\r\nbla bla \r\n<body>\r\n<html>";
加载它(在这种情况下为字符串):
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
如果从网上获取,类似:
var web = new HtmlWeb();
var doc = web.Load(url);
现在只选择具有非空白的文本节点并修剪它们。
var text = doc.DocumentNode.Descendants()
.Where(x => x.NodeType == HtmlNodeType.Text && x.InnerText.Trim().Length > 0)
.Select(x => x.InnerText.Trim());
如果您愿意,可以将其作为单个连接字符串获取:
String.Join(" ", text)
当然这只适用于简单的网页。任何复杂的东西也会返回你明确不想要的数据的节点,比如javascript函数等。
答案 2 :(得分:0)
public string GetwebContent(string urlForGet)
{
// Create WebClient
var client = new WebClient();
// Download Text From web
var text = client.DownloadString(urlForGet);
return text.ToString();
}
答案 3 :(得分:-1)
我认为this link可以帮到你。
/// <summary>
/// Remove HTML tags from string using char array.
/// </summary>
public static string StripTagsCharArray(string source)
{
char[] array = new char[source.Length];
int arrayIndex = 0;
bool inside = false;
for (int i = 0; i < source.Length; i++)
{
char let = source[i];
if (let == '<')
{
inside = true;
continue;
}
if (let == '>')
{
inside = false;
continue;
}
if (!inside)
{
array[arrayIndex] = let;
arrayIndex++;
}
}
return new string(array, 0, arrayIndex);
}
答案 4 :(得分:-2)
// Reading Web page content in c# program
//Specify the Web page to read
WebRequest request = WebRequest.Create("http://aspspider.info/snallathambi/default.aspx");
//Get the response
WebResponse response = request.GetResponse();
//Read the stream from the response
StreamReader reader = new StreamReader(response.GetResponseStream());
//Read the text from stream reader
string str = reader.ReadLine();
for(int i=0;i<200;i++)
{
str += reader.ReadLine();
}
Console.Write(str);