从Scraped屏幕解析信息(HTML)

时间:2009-08-16 04:23:17

标签: c# screen-scraping

我正试图让我的程序从网站上“删除”新闻并将其放在WinForm上,但我的方法是如此愚蠢和冗余,我相信必须有更好的方法来做到这一点。 / p>

public void LoadLatestNews()
{
    WebClient TheWebClient = new WebClient();
    string SourceCode = TheWebClient.DownloadString("http://www.chronic-domination.com/");
    int NewsPosition = SourceCode.IndexOf("news_post-title");

    string Y = SourceCode.Substring(NewsPosition,5000);
    int TitlePosition = Y.IndexOf("</div");

    string NewsPostTitle = SourceCode.Substring((NewsPosition + 17), (TitlePosition - 17));

    int BodyPosition = Y.IndexOf("news_post-body");

    string X = Y.Substring(BodyPosition, 1000);
    int EndBodyPosition = X.IndexOf("<br><br>");

    string NewsPostBody = X.Substring((BodyPosition + 16)+ EndBodyPosition);

    MessageBox.Show(NewsPostTitle);

}

这个代码不仅可怕,而且甚至无法按预期工作。所以我求求你,教我这样做的正确方法吗?

2 个答案:

答案 0 :(得分:4)

使用Html Agility Pack解析页面。您可以加载页面的整个文本,然后将其视为XML - 编写XPATH表达式或抓取DOM树以获得所需内容。

这使您可以像任何其他XML存储一样,完全避免“抓取”问题并接近任务。这是XPATH的very basic intro。您可以编写类似myDoc.SelectSingleNode("//div[@class='header']/h2").InnerText的内容,这意味着“选择H2元素,它是DIV的直接子元素,其类是'header'”,然后获取该元素的内部文本。

答案 1 :(得分:1)

查看维基百科关于网页搜集的文章:Here 我做了大量的网页抓取,根据我的经验,正则表达式在80%的时间内都足够了。之后,您需要查看解析(X)HTML并遍历DOM树。