我正试图让我的程序从网站上“删除”新闻并将其放在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);
}
这个代码不仅可怕,而且甚至无法按预期工作。所以我求求你,教我这样做的正确方法吗?
答案 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树。