我是OOP编程的新手,我想知道是否有人可以帮助我,我一直在编写一些代码,并且我意识到我需要程序做很多重复;
class scrape
{
public void parse()
{
string Url = "http://www.blah.co.uk/";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
Console.WriteLine("URL Loaded,");
scrape scrape = new scrape();
scrape.cats(doc);
}
private void cats(HtmlDocument doc)
{
HtmlNode topcats = doc.GetElementbyId("main_nav");
if (topcats != null)
{
IEnumerable<HtmlNode> topnav = topcats.Descendants("a");
foreach (var toplink in topnav)
{
if (toplink.Attributes.Contains("href"))
{
if (toplink.Attributes["href"].Value.EndsWith(".html"))
{
Console.WriteLine("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
Console.WriteLine("++++++++ " + toplink.InnerText + " +++++++++++");
//sub cats
HtmlWeb cat_web = new HtmlWeb();
HtmlDocument cat_doc = cat_web.Load("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
HtmlNode subcats = cat_doc.GetElementbyId("pagenav");
if (subcats != null)
{
IEnumerable<HtmlNode> subnav = subcats.Descendants("a");
foreach (var sublink in subnav)
{
if (sublink.Attributes.Contains("href"))
{
if (sublink.Attributes["href"].Value.EndsWith(".html"))
{
Console.WriteLine("http://www.blah.co.uk/" +sublink.Attributes["href"].Value);
Console.WriteLine(sublink.InnerText);
}
}
}
}
}
}
}
}
Console.ReadLine();
}
}
}
从上面可以帮助我减少代码中的重复以及如何在c#中执行此操作。非常感谢任何帮助或信息。
答案 0 :(得分:1)
我认为你的探索实际上是关于OOP的介绍
在设计OOP应用程序时,您需要考虑您在做什么,
什么是参与的“事物”,将它们分为类和对象(类的实例)。
认为对象可以做什么,写出最基本的动作,然后根据基本行为做出更复杂的动作
https://www.youtube.com/watch?v=c5kfCH50wl0
例如,实例化和创建,Parse方法是对象的一部分,它无缘无故地创建一个新实例。
我已经为你制定了方法。
public void Read()
{
HtmlDocument topDocument = LoadDocument("blah.uk");
IEnumerable<HtmlNode> topLinks = ReadLinks(topDocument, "main_nav");
foreach (HtmlNode topLink in topLinks) {
HtmlDocument catDoc = LoadDocument("littletreasurespartybags" + toplink.Attributes["href"].Value);
IEnumerable<HtmlNode> catLinks = ReadLinks(topDocument, "main_nav");
foreach (HtmlNode catLink in catLinks) {
.....
}
}
}
private HtmlDocument LoadDocument(string Url) { ..... }
private IEnumerable<HtmlNode> ReadLinks(HtmlDocument document, string topElement) { ....}