首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

不知道这个有关问题算不算网页爬虫

2012-08-28 
不知道这个问题算不算网页爬虫大侠们 你们好,我是一名新手:公司需要我们从网页上扒一些公司的地址和联系方

不知道这个问题算不算网页爬虫
大侠们 你们好,我是一名新手:公司需要我们从网页上扒一些公司的地址和联系方式什么的,我想既然学变成的肯定能用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();                        }                    }                }            }        }catch (ParserException e) {            e.printStackTrace();        }    }}
[解决办法]
探讨

楼上的大侠你可能没有明白我的意思,
我不需要拔网站,我是想获取网站上有用的信息。

------解决方案--------------------


文字信息的话,你另一个帖子的也可以吧,但代码有问题,给你指出来了。
[解决办法]

Java code
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 换成你想要爬的网址即可。 

热点排行