毕业设计想做一个垂直搜索引擎,关于手机方面
我毕业设计打算做一个垂直搜索引擎,关于手机方面的,抓取几个主流电商的网站的手机信息,导入到自己的搜索引擎主要实现搜索的比价,以及相关手机的性能参数。导师说最大的困难时抓取信息,这几天分析了京东商城手机方面的html页面原码,发现还是很有规律的:
1)手机展览的页面公27页(到目前为止),格式是:http://www.360buy.com/products/652-653-655-0-0-0-0-0-0-0-1-1-1.html然后是http://www.360buy.com/products/652-653-655-0-0-0-0-0-0-0-1-1-2.html,只是末尾数据的变化。
2)手机信息页面是http://www.360buy.com/product/576909.html即http://www.360buy.com/product/+相关编号
3)用vc写了一个爬虫的雏形,就是抓取展览页的html源码,然后抽取产品信息的url地址,完整的爬虫还没开始写,过段时间在写完了会贴出来:
//VC++环境 #include <stdio.h> #include <afxinet.h> int main(int argc, char* argv[]) { char * url = "http://www.360buy.com/products/652-653-655-0-0-0-0-0-0-0-1-1-1.html"; CString content;//存储读取的html源码 printf("%s\n",url); //建立httpClient会话 CInternetSession session("HttpClient"); CHttpFile* pfile = (CHttpFile *)session.OpenURL(url); DWORD dwStatusCode; pfile -> QueryInfoStatusCode(dwStatusCode); if(dwStatusCode == HTTP_STATUS_OK) { CString data; while (pfile -> ReadString(data)) { content+=data+"\r\n"; } content.TrimRight(); // printf("%s\n" ,(LPCTSTR)content); } pfile -> Close(); delete pfile; session.Close(); printf("%d\n",content.GetLength()); int hrefStart,hrefEnd; hrefStart=hrefEnd=0; //寻找html中<a target='_blank' href=#######>的字符串,以提取手机的url while((hrefStart=content.Find("<a target='_blank' href=",hrefEnd))!=-1){ hrefEnd=content.Find(">",hrefStart); for(int i=hrefStart;i<=hrefEnd;++i) printf("%c",content[i]); printf("\n"); } return 0 ; }
4、虽然c++的效率很高,我还是打算下一步用java来开发爬虫,一方面开发起来会比用c++简单些,另一方面抓取的信息量也不是很大,抓取的网页两不会超过5000页,如果需要优化,再回到c++,先实现任务,在有化任务,最后完美地完成工作。
5、规划一下过程:
1)先写爬虫来抓取信息。打算自己写爬虫,虽然有很多开源的爬虫,但是我发现并不太适合垂直搜索引擎的抓取过程,因为要抓取的信息是约束条件比较多,而且每个网站的信息组织形式都不太一样,自己写spider的更容易掌握业务的变化。
2)提取网页信息。也打算自己写解析工具,一则写起来不难,二则用开源的同样有点杀鸡用牛刀的感觉。
3)把有关信息导入数据库以便于将来显示相关的页面
4)建立索引,这里打算用lucene,然后结合ssh建立一个搜索引擎网站,给自己的大学画一个圆满的句号。
先写到这里,因为一方面准备考研,毕业设计只能慢慢写了。