C# 模块化编程以适应未来的变化(用于抓取网站的软件)

C# 模块化编程以适应未来的变化(用于抓取网站的软件),c#,recommendation-engine,modular,C#,Recommendation Engine,Modular,我用C语言开发了一个软件,使用Windows窗体从选定的网站上获取图像 我遇到的第一个问题是,我监视的网站不断地改变它们的外观和感觉,因此需要更新我的代码。我已经切换到使用XPath来隔离我寻找的div,但是div id也发生了变化。我曾想过为软件将读取的每个站点使用一个带有divxpath的文本文件,从而节省了编辑和重新编译代码的时间。有没有更好的办法来解决这个问题?也许是密码 第二,由于每个网站使用不同的格式和编码,我不得不用HtmlDocument、HtmlWebResponse、Html

我用C语言开发了一个软件,使用Windows窗体从选定的网站上获取图像

  • 我遇到的第一个问题是,我监视的网站不断地改变它们的外观和感觉,因此需要更新我的代码。我已经切换到使用XPath来隔离我寻找的div,但是div id也发生了变化。我曾想过为软件将读取的每个站点使用一个带有divxpath的文本文件,从而节省了编辑和重新编译代码的时间。有没有更好的办法来解决这个问题?也许是密码

  • 第二,由于每个网站使用不同的格式和编码,我不得不用HtmlDocument、HtmlWebResponse、HtmlNodes和它们各自的其他代码重写部分代码,这几乎占了我代码的一半。我不能把它们放在一起,因为有些需要额外的刮削和分页,有些则不需要。有没有办法简化这个问题


  • 最后,我将整个代码放在一个类文件中,包含大约600行代码。我仅有的方法是backgroundworkers、ui事件处理程序、每个站点的一个抓取方法和一个保存图像的方法。将整个代码放在一个类中可以吗?当我用Java编写代码时,我经常使用多个类并将它们作为对象调用,这有助于简化对特定部分的更改。我能用C#做同样的事吗

  • 有没有更有效的方法来制作软件?我想为每个站点创建一个类,这样就可以直接对有问题的类进行修改,但这会导致在每个类中重复很多行。或者把所有的东西都放在一个类文件里可以吗

    谢谢


    PS:这个软件是供个人使用的,但我认为这是一个学习和应用好编程的好机会

    这些东西总是归结为识别模式和隔离功能。您必须查看特定的功能,并根据需要将该功能分组到方法和类中。我认为,如果代码不是专有的,您可以在这里得到很多帮助:“我将整个代码放在一个类文件中,包含大约600行代码”-关注点分离:意味着将相关功能隔离到类中。使代码更易于管理(除非你做得太过火(不太可能有600行代码;思考起来更像600000行代码!)1。在代码之外使用单独的数据存储绝对是一种好做法。您可以将字符串放入项目“资源”文件(.resx)。3.我建议编写一个“Scraper”接口,每个站点一个Scraper类。将特定于站点的代码移动到类中的方法中,例如DoScrape()。然后在主程序代码中,您可以实例化每个scraper并调用myScraper.DoScrape()或您需要的任何东西。绝对不要在类之间重复任何代码——如果您有共同的功能,请将其移动到多个小方法中的“Helper”类中,以便它可以在任何地方使用。@Rig和Mitch:非常感谢您的输入。很高兴知道分班上课很好。我会尽量消除重复@阿什:谢谢你提供的细节。助手文件和刮刀界面看起来确实是个好主意。我会试试看。再次感谢。如果你还没有使用它,HTMLAgility包可能值得一看。