大侠们 你们好,我是一名新手:公司需要我们从网页上扒一些公司的地址和联系方式什么的,我想既然学变成的肯定能用JAVA技术来做一个小程序什么的获取自定义数据。我是感觉如果这个页面在电脑上的话可以利用流读取文件内容然后功过正则表达式匹配获取,但是在网络上怎么做确实一点思路没有。希望知道的大侠们可以提供思路,如果能提供代码供研究那小弟更是感激不尽了。

解决方案 »

  1.   

    这类问题,CSDN上经常有,基本上分为两步:
    1、用HttpClient之类的组件,爬取页面,其支持Cookie等;
    2、用HtmlParser(类似DOM访问)或直接用正则表达式,将爬取下来的页面,进行分析,解析其中所需数据项。
      

  2.   

    之前在一个帖子里写过的,粘给你参考下吧。
    package cn.yq;import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.MalformedURLException;
    import java.net.URL;import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.filters.NodeClassFilter;
    import org.htmlparser.filters.OrFilter;
    import org.htmlparser.tags.ImageTag;
    import org.htmlparser.tags.LinkTag;
    import org.htmlparser.util.NodeList;
    import org.htmlparser.util.ParserException;public class URLParse {
        public static void main(String[] args) {
            try {   
                Parser parser = new Parser("http://slide.sports.sina.com.cn/euro2012/slide_2_31402_29988.html");  
                parser.setEncoding("gb2312");
                //提取链接
                NodeFilter frameFilter = new NodeFilter() {
                    public boolean accept(Node node) {
                        if (node.getText().startsWith("frame src=")) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                };
                //过滤出图片
                OrFilter orFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new 
                        NodeClassFilter(ImageTag.class));
                OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
                
                NodeList nodelist = parser.extractAllNodesThatMatch(linkFilter);
                //循环取得image标签
                for (int i = 0; i < nodelist.size(); i++) {
                    Node tag = nodelist.elementAt(i);
                    if (tag instanceof ImageTag)
                    {
                        ImageTag image = (ImageTag) nodelist.elementAt(i);
                        String urlstr = image.getImageURL();
                        InputStream is;
                        OutputStream os;
                        int len;
                        if(urlstr.endsWith("jpg") || urlstr.endsWith("gif")){
                            System.out.println(urlstr);
                            //下载到本地目录
                            byte[] buf = new byte[102400];
                            try {
                                URL url = new URL(urlstr);
                                String suffix = urlstr.substring(urlstr.lastIndexOf("."),urlstr.length());                            try {
                                    is = url.openConnection().getInputStream();
                                    os = new FileOutputStream("d:/downloadimage/" + i + suffix);
                                    while((len = is.read(buf)) != -1){
                                        os.write(buf,0,len);
                                    }
                                    os.close();                            
                                    is.close();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
        
                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            }
                        }
                    }            }        }catch (ParserException e) {
                e.printStackTrace();
            }
        }
    }另外用迅雷也可以了,不一定非要java写程序。在网页上点右键,“使用迅雷下载全部键接”,选择下载的文件类型,一样可以下载。
      

  3.   


    先拿到页面信息的String,然后再正则匹配。
      

  4.   


    url = new URL(adress);
    connection = (HttpURLConnection)url.openConnection();
    // 连接超时自动关闭
    connection.setConnectTimeout(60000);
    String sCurrentLine = "";
    StringBuffer sTotalString = new StringBuffer();
    isr=  new InputStreamReader(connection.getInputStream(), "utf-8");
    l_reader = new BufferedReader(isr);
    while ((sCurrentLine = l_reader.readLine()) != null)
    sTotalString.append(sCurrentLine);
    html = sTotalString.toString();//最简单的例子。将 adress 换成你想要爬的网址即可。