日期:2014-05-19  浏览次数:20688 次

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

------解决方案--------------------
这类问题,CSDN上经常有,基本上分为两步:
1、用HttpClient之类的组件,爬取页面,其支持Cookie等;
2、用HtmlParser(类似DOM访问)或直接用正则表达式,将爬取下来的页面,进行分析,解析其中所需数据项。
------解决方案--------------------
之前在一个帖子里写过的,粘给你参考下吧。
Java code
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();
                        }