论坛首页 Java企业应用论坛

自制行业搜索引擎

浏览 10943 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-24  
     呵呵,这一段时间尽在瞎鼓捣一些东西,看看结果吧:仪器仪表搜索
     这个引擎的基本制作思路如下:
1)、利用爬虫抓取指定数据到数据库。使用爬虫的机制找到包含有所需信息的指定网页,一般都比较有规律,但是各个网站的规则不同。比如:中国仪器仪表国际网   其规则是:disp.asp?id=xx,还有:金泰阳仪器仪表采购网,其规则是:cp.asp?id=xx,所以要分别对待,其内容也要分别处理。可以看看中国仪器仪表国际网的抓取代码片段:(关键是规则)
java 代码
 
  1. BufferedReader in = new BufferedReader(new InputStreamReader(connection  
  2.                 .getInputStream(), charset)); // 使用指定编码接收数据  
  3.         Productinfo info = new Productinfo();  
  4.         String line = null;  
  5.         String LoveIt = "";  
  6.         String pix = "";  
  7.         int i = 0;  
  8.         Manufacturer M = new Manufacturer();  
  9.         while ((line = in.readLine()) != null) {  
  10.             if (line.indexOf(pix) > 0) {  
  11.                 i++;  
  12.                 /** 
  13.                  * 把这一行抽出来呀!!,历史任务! 
  14.                  */  
  15.                 if (i == 1) {  
  16.                     int BeginIt = line.indexOf(pix);  
  17.                     int EndinIt = line.indexOf("", BeginIt);  
  18.                     LoveIt = line.substring(BeginIt + pix.length(), EndinIt);  
  19.                     M.setManufacturerName(LoveIt);  
  20.                     // break;  
  21.                     if (LoveIt.length() > 5) {  
  22.                         continue;  
  23.                     }  
  24.                 }  
  25.                 if (i == 2) {  
  26.                     int BeginIt = line.indexOf(pix);  
  27.                     int EndinIt = line.indexOf("", BeginIt);  
  28.                     LoveIt = line.substring(BeginIt + pix.length(), EndinIt);  
  29.                     info.setProductName(LoveIt);  
  30.                     if (LoveIt.length() > 5) {  
  31.                         continue;  
  32.                     }  
  33.                 }  
  34.                 if (i == 3) {  
  35.                     int BeginIt = line.indexOf(pix);  
  36.                     int EndinIt = line.indexOf("", BeginIt);  
  37.                     LoveIt = line.substring(BeginIt + pix.length(), EndinIt);  
  38.                     info.setProductSpec(LoveIt);  
  39.                     if (LoveIt.length() > 5) {  
  40.                         continue;  
  41.                     }  
  42.                 }  
  43.                 String ImageUrl = Url.replace("disp.asp""showing.asp");  
  44.                 info.setFirstPic("http://www.china-meter.com/btob/backmanage/"  
  45.                         + ImageUrl);  
  46.   
  47.                 if (i == 5) {  
  48.                     int BeginIt3 = line.indexOf(pix);  
  49.                     int EndinIt3 = line.indexOf("", BeginIt3);  
  50.                     if (EndinIt3 == -1) {  
  51.                         line = in.readLine();  
  52.                         EndinIt3 = line.indexOf("", BeginIt3);  
  53.                         LoveIt = line;  
  54.                     }  
  55.                     if (LoveIt.length() == 0) {  
  56.                         LoveIt = line.substring(BeginIt3 + pix.length(),  
  57.                                 EndinIt3);  
  58.                     }  
  59.                     info.setProductDesc(LoveIt);  
  60.                     if (LoveIt.length() > 5) {  
  61.                         continue;  
  62.                     }  
  63.                 }  
  64.                 if (i == 8) { // 厂商地址  
  65.                     int BeginIt4 = line.indexOf(pix);  
  66.                     int EndinIt4 = line.indexOf("", BeginIt4);  
  67.                     LoveIt = line.substring(BeginIt4 + pix.length(), EndinIt4);  
  68.                     M.setAddress(LoveIt);  
  69.                     if (LoveIt.length() > 5) {  
  70.                         continue;  
  71.                     }  
  72.                 }  
  73.                 if (i == 9) { // 厂商电话  
  74.                     int BeginIt4 = line.indexOf(pix);  
  75.                     int EndinIt4 = line.indexOf("", BeginIt4);  
  76.                     LoveIt = line.substring(BeginIt4 + pix.length(), EndinIt4);  
  77.                     M.setTel(LoveIt);  
  78.                     if (LoveIt.length() > 5) {  
  79.                         continue;  
  80.                     }  
  81.                 }  
  82.   
  83.             }  
  84.         }  
  85.         in.close();  
        呵呵,可能运行不到10分钟就会抓取他们近万条的产品,是不是很拽呀,看了我的程序,你会发现哪些所谓的网站录入员的工作都是无用功。我利用这种技术已经在近1个月之内利用课余时间抓取到10万多条记录(当然有用的有效的记录只有2、3万条),
2)、建立索引,放在指定目录。
3)、建立搜索,并自定义分词技术、排序和高亮的规则,然后进行查询。
其中,建立索引已经改造,搜索的排序算法和竞价还在开发当中。搜索不够准确也是迫在眉睫的事。
如果大家有什么好的建议可以互相交流。
   发表时间:2007-10-24  
10分钟近万条

近1个月内10万条


这数字看起来真别扭。

10万条太少了,起码百万。



0 请登录后投票
   发表时间:2007-10-24  
呵呵,还要压缩一些重复的信息,还得上班呵呵。
0 请登录后投票
   发表时间:2007-10-26  
这个东西我觉得应该是作成比较通用的合适一些,可以根据配置不同来抓取不同网站的内容。目前我正在做一个通用的抓取系统,可以根据需要进行配置、抓取数据和发布数据,目前只剩下一个定时抓取没有做,其他已经完成了,使用了一下效果还不错,支持大多数网站,最好再配合一个完善的CMS就齐了。
http://ilvs.cn/server/
这里是我测试的时候抓取出来的内容,效果还算不错只是有些图片显示的有点问题。
0 请登录后投票
   发表时间:2007-10-26  
N,同感,目前正在使用xml做为一个抓取的基本过滤规则,正在制作和完善当中。呵呵。互联网是个大的数据库呀,我们应该好好利用。
另外,也正在制作爬虫的半自动漫游程序。希望共勉!
0 请登录后投票
   发表时间:2007-10-26  
通用比较难。。

据我所知,一些大网站还只是模板对应,,通用还做不到。

当然要求不一样,也不大好说。
0 请登录后投票
   发表时间:2008-02-19  
我公司有个行业搜索的项目,想请你参与,请你致电13602621892林先生联系,或者发送邮件至linzh@twicechina.com
0 请登录后投票
   发表时间:2008-02-19  
你爬我也爬,把网络爬死算了,可以直接使用baidu,google等搜索引擎把范围缩小,然后再后处理筛选自己需要的内容。
0 请登录后投票
   发表时间:2008-02-20  
btprince 写道
你爬我也爬,把网络爬死算了,可以直接使用baidu,google等搜索引擎把范围缩小,然后再后处理筛选自己需要的内容。



网络会不会爬死,这不是我们的任务,也不是一般人能解决的。

用baidu和google等搜索引擎在某种程度的确可以起到搜索作用,但是很难做好。


要做好,必须要建立自己的数据平台。
0 请登录后投票
   发表时间:2008-02-20  
1 .你的效率比较低 一月10万? 我以前也做se玩 单机多线程一天10万差不多(好像还是低),是不是通用的和行业的爬虫效率不同?
2 .行业的专业性很重要。应该还有一些策略来净化搜索内容,比如导向词,专用词库。
3 .有位javaeyer曾经给我留言,抓取不是重点,后续工作才是重要的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics