最近再写一个房产群发、采集的软件。百度【房产群发】,类似软件一大堆,就是仿着他们的做的。用的是winfrom(发现在哪工作都用...)、Sqlite。
涉及到的就是正则、多线程、反射。HttpWebRequest、HttpWebResponse、WebClient、Cookie、StreamReader这些类来回倒腾。
还有抓包工具HttpAnalyzerStdV7。
具体的结构就是简单三层。
Winfrom做界面。
BLL业务逻辑,负责生成和调控采集发布任务。
DAL访问SQLite保存数据。每个房产网站的对应一个项目,编译之后每个网站都有各自的DLL。DLL实现了BLL中规定的接口,包括采集、发布、接受命令、返回状态等等方法。
BLL通过反射机制来调用DLL具体的方法,好处就是DLL缺失,或者因为升级损坏什么的不影响其他网站的工作。
采集和发布,采集要简单的多。访问一个网址用WebClient下载HTML代码,这里重写了一下WebClient,只是简单的加上了一个超时设置。注意好网站编码就足够了,剩下的就是写正则,抓取内容。写这个软件的好处就是正则大大熟悉了,原来用正则就是网上抄一个,现在自己能写写了。
发布就要复杂的多,但是注意的点其实并不多,就是繁杂。
1.POST数据准备。每个网站验证的东西并不同,有的网站加密必须要算出相应的Key一起提交。还有最多的是小区ID、城市ID、区ID,一般都是ajax获取的,每个网站各有不同嘛。
2.提交方式,一是直接POST这种方式比较简单。二就是生成一个流,模拟网站正常的提交的数据流。
3.cookie必须要准备好,模拟网站需要的。
基本上就这3点做好,这些网站的登录、发布、图片上传都能搞定。当然也有例外,那就另说了...
在说说整个程序的运行。
第一步当然是登录啦,输入用户名密码之后,程序访问网站验证用户名密码是否正确。
成功之后是检测升级,网站会返回最新的版本和数据库版本,如果不同,再次访问一个地址,会返回最新的下载地址和数据结构,我这里返回的都是JSON,容易读取嘛。
然后程序就下载更新包或者升级数据库。
程序正常打开之后,
首先是采集。用户可以设置采集的网站、时间频率、关键词设定等等。程序接到设置之后,生成一个任务实体。然后传递给BLL,BLL根据这个任务实体中的网站设置调用相关的DLL,这里就开启了多线程。网站DLL接到任务就开始采集啦。
之后是发布,前面是一样的。网站DLL接收到发布任务之后,首先要登录,保存cookie。可能还要访问多个网址,保存响应的cookie,模拟正常操作的样子。之后就根据需要发布的房源信息的种类,比如出租、出售、合租等等准备数据然后提交。
还有,最近在用APiCloud写一个手机应用,感觉还是不错的。