因为需要全国各地的火车车次数据库,发现http://www.railway.com.cn/query/checiQuery.jsp上较新,较准确,可以通过查询得到,现在能想到的办法是查询完保存到Excel中,然后放到数据库中。但是有2000多车次,这样也太笨了,希望大家帮忙支招。另外,我有2006年以前的数据,但是变化比较大,想要最新的。希望大家的方法是利己但不损人,谢谢!

解决方案 »

  1.   

    用WebRequest即时抓取或按一定规则抓取,也就是一楼说的网络小偷,但我认为网络就是信息共享,如果信息不共享就不叫互联网了,所以获取别人的信息不能叫偷,另强列建议还是将抓取的数据存入本地数据库,试想如果别人在你的网站上要查一个车次,还得等待你的站点从其它站点上抓取数据,这个往返过程是用户难以忍受的,要碰上网速不佳或其它因素就更糟糕;再比如多个用户查询的是同一个车次,你都要做相同的数据往返,这也是费力不讨好。所以最好利用一个服务把数据抓到本地数据库,比如可以在凌晨进行,或判断是否用户第一次请求,如果是则抓取并存入本地,否则直接从本地数据库返回。
      

  2.   

    这是很久以前写的一个抓新浪天气预报的主要代码,希望对楼主有所帮助:
    string url="http://cgi.news.sina.com.cn/cgi-bin/figureWeather/search.cgi?city=%BC%AA%CA%D7";//新浪天气预报搜索页面,关键字为吉首
    WebRequest wreq=WebRequest.Create(url); //创建 WebRequest 对象
    try
    {
    HttpWebResponse wresp=(HttpWebResponse)wreq.GetResponse(); 
    string HTML ="";
    Stream s=wresp.GetResponseStream(); 
    StreamReader objReader = new StreamReader(s,System.Text.Encoding.Default); 
    string sLine = ""; //存放读取到的流的字符串
    int i = 0; //从0行开始循环
    while (sLine!=null) 

        i++; 
        sLine = objReader.ReadLine();//读取第i行存放在字符串中 
        if (sLine!=null) 
            HTML += sLine; //HTML为整个页面代码
    }
    ......
    }