如何从 HTML 页 C# 中提取一个或多个单词
How to extract one word or some words from an HTML page C#
这里我试图从 HTML 页面中提取一个词。
例如,有两个文本框(1 和 2)。现在我正在尝试在 textbox1 上提供 Whosebug 问题 ID,并在 textbox2 上获取 "asked" 值。
例如,如果我在 textbox1 上给出 36,这应该在 textbox2 上给我“9 年 4 个月前”。
WebClient webpage = new WebClient();
String html = webpage.DownloadString("https://whosebug.com/questions/" + textBox1.Text);
MatchCollection match = Regex.Matches(html, FILTERHERE, RegexOptions.Singleline);
问题是我不知道如何过滤我的输出(FILTERHERE)?
另外,如何将我的输出发送到 textbox2?
通过 Windows Forms 应用程序WebBrowser
控件可以使用 wpapps mshtml 库并公开托管 HTML DOM
。检索 asked
文本的函数示例:
private static string GetAskedText(HtmlDocument doc)
{
if (doc == null)
return "document-null";
IEnumerable<mshtml.HTMLDivElement> divs = doc.GetElementsByTagName("div")
.OfType<HtmlElement>()
.Select(e => e.DomElement as mshtml.HTMLDivElement);
foreach (var div in divs)
{
if (string.IsNullOrWhiteSpace(div?.className))
continue;
if (div.className.Trim().ToLower() != "user-info")
continue;
var spans = div.getElementsByTagName("span").OfType<mshtml.HTMLSpanElement>();
foreach (var span in spans)
{
if (string.IsNullOrWhiteSpace(span?.className))
continue;
if (span.className == "relativetime")
{
return span.innerText;
}
}
}
return "not-found";
}
Complete example 和 Windows 表格申请可以从我的保管箱下载。
string url = "https://whosebug.com/questions/";
var web = new HtmlWeb();
var doc = web.Load(url + textBox1.Text); //the text is "36"
var tag = doc.DocumentNode.SelectSingleNode("//*[@id='qinfo']//td[./p[@class='label-key' and text()='asked']]/following-sibling::td//b");
textBox2.Text = tag.InnerText;
如果您不知道 XPath,Chrome 和 Firefox 的浏览器扩展可以为您获取任何 Html 标记的 XPath(我个人手动编写它们以降低它们的敏感度更改页面结构)。
这里我试图从 HTML 页面中提取一个词。
例如,有两个文本框(1 和 2)。现在我正在尝试在 textbox1 上提供 Whosebug 问题 ID,并在 textbox2 上获取 "asked" 值。
例如,如果我在 textbox1 上给出 36,这应该在 textbox2 上给我“9 年 4 个月前”。
WebClient webpage = new WebClient();
String html = webpage.DownloadString("https://whosebug.com/questions/" + textBox1.Text);
MatchCollection match = Regex.Matches(html, FILTERHERE, RegexOptions.Singleline);
问题是我不知道如何过滤我的输出(FILTERHERE)?
另外,如何将我的输出发送到 textbox2?
通过 Windows Forms 应用程序WebBrowser
控件可以使用 wpapps mshtml 库并公开托管 HTML DOM
。检索 asked
文本的函数示例:
private static string GetAskedText(HtmlDocument doc)
{
if (doc == null)
return "document-null";
IEnumerable<mshtml.HTMLDivElement> divs = doc.GetElementsByTagName("div")
.OfType<HtmlElement>()
.Select(e => e.DomElement as mshtml.HTMLDivElement);
foreach (var div in divs)
{
if (string.IsNullOrWhiteSpace(div?.className))
continue;
if (div.className.Trim().ToLower() != "user-info")
continue;
var spans = div.getElementsByTagName("span").OfType<mshtml.HTMLSpanElement>();
foreach (var span in spans)
{
if (string.IsNullOrWhiteSpace(span?.className))
continue;
if (span.className == "relativetime")
{
return span.innerText;
}
}
}
return "not-found";
}
Complete example 和 Windows 表格申请可以从我的保管箱下载。
string url = "https://whosebug.com/questions/";
var web = new HtmlWeb();
var doc = web.Load(url + textBox1.Text); //the text is "36"
var tag = doc.DocumentNode.SelectSingleNode("//*[@id='qinfo']//td[./p[@class='label-key' and text()='asked']]/following-sibling::td//b");
textBox2.Text = tag.InnerText;
如果您不知道 XPath,Chrome 和 Firefox 的浏览器扩展可以为您获取任何 Html 标记的 XPath(我个人手动编写它们以降低它们的敏感度更改页面结构)。