首页 > 解决方案 > 如何在c#中从网页中提取特定行

问题描述

 HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("https://www.google.com/search?q=" + "msg");
    HttpWebResponse myres = (HttpWebResponse)myReq.GetResponse();

    using (StreamReader sr = new StreamReader(myres.GetResponseStream()))
    {
        pageContent = sr.ReadToEnd();
    }

    if (pageContent.Contains("find"))
    {

     display = "done";

    }

目前此代码所做的是检查 url 上是否存在“find”,如果存在则显示完成我想要的是显示包含“find”的整行或 para。

所以就像 display="done" 我想存储包含 find 的行显示

标签: c#html-parsing

解决方案


HTML 页面没有行。标签外的空白被忽略,整个缩小页面可能根本没有换行符。即使这样做了,换行符即使在标签内也会被忽略。这就是为什么<br>有必要。如果要查找特定元素,则必须使用HTMLAgilityPack之类的 HTML 解析器,并使用 XPath 或 CSS 选择器表达式识别元素。

从登录页面示例复制:

var url = $"https://www.google.com/search?q={msg}" ;
var web = new HtmlWeb();
var doc = web.Load(url);

var value = doc.DocumentNode
 .SelectNodes("//div[@id='center_col']")
 .First()
 .Attributes["value"].Value;

你放入什么SelectNodes取决于你想找到什么。

测试各种表达式的一种方法是在浏览器中打开您想要的网页,打开浏览器的开发者工具并开始在元素检查器中搜索。那里的搜索功能接受 XPath 和 CSS 选择器。


推荐阅读