一点体会:反射是个好东西
2009年3月13日
没有评论
最近一个项目中需要有个批量抓取网站特定内容的工作,流程大概是登陆->获取该用户文章列表->抓取文章。做起来很容易,就是post或者get数据,然后正则匹配,但是问题是需要做好几个网站的,这个功能是项目中的一个部分,就需要有可扩展,低耦。所以一开始的时候是想在主题程序实现通用程序,再用配置文件,把正则规则载入,一开始还行,但是后来发现了几个问题,1.所谓的通用的东西=兼容多种规则=体积庞大,这个很好理解,比如要兼容几个浏览器的js必然有多处hack。2.效率低下,本来抓取就是需要做很多字符串的处理,加上规则后必然导致多处判断,甚至处处判断。3.开发难度大,针对每个网站的规则很好写,但是通用的东西必定会一改再改,比如获取列表是get,偏偏有一家用post,还加了验证用的随机参数,那就必须在之前的一页把提出来,而这个并不具有普遍性,必须为它“个性化定制”。4.整个结构很ugly。
经过思考后,我改进了模型,还是提取出来操作的常规几步作为接口,每个网站用个类来实现它,提供统一的对外接口。生成文件A,而主文件中只需要加载它并反射出来,使用相同的方法来调用获取不同的网站数据,被抓取网站有更新或者需要添加新的网站时,只需要更新A即可,对主体是黑盒。整个结构看起来爽快明了,而且每个网站的抓取实现各不相同也罢,没有干扰的。
做好之后,再想想其实很简单,也许对于经验老到的玩家而言,这个应该是”下意识”的首选方案。:)
Popularity: 37% [?]
最新评论