最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

求java爬虫学习实际案例

[复制链接]
跳转到指定楼层
楼主
发表于 2014-11-2 18:26:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大家好,我刚开始学习java爬虫,请问有java爬虫学习实际案例吗,谢谢大家帮忙

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

沙发
发表于 2014-11-2 18:48:56 | 只看该作者
本帖最后由 乔帮主 于 2014-11-2 18:57 编辑

提供几个学习案例:

1. java爬虫程序简单例子(获取页面所有邮箱地址)

[Java] 纯文本查看 复制代码
这是一段在网页里面爬邮箱地址的代码,可以获得页面里面所有的邮箱地址。

import java.io.*;
import java.util.regex.*;
import java.net.*;
public class Test {
 public static void main(String[] args) throws Exception{
  getMails_1();
 }
 public static void getMails_1() throws Exception
 {
  URL url=new URL(“[url=http://jingyan.baidu.com/article/647f01157ea4ca7f2148a8ce.html]http://jingyan.baidu.com/article/647f01157ea4ca7f2148a8ce.html[/url]”);
  URLConnection Conn=url.openConnection();
  BufferedReader bufin=new BufferedReader(new InputStreamReader(Conn.getInputStream()));
  String line=null;
  String mailreg=”\\w+@\\w+(\\.\\w+)+”;
  Pattern p=Pattern.compile(mailreg);
  while((line=bufin.readLine())!=null){
   Matcher m=p.matcher(line);
   while(m.find()){
    System.out.println(m.group());
   }
  }
 }
}


2. java 爬虫抓取数据一个简单例子。用来备份用的。
[Java] 纯文本查看 复制代码
java 爬虫抓取数据一个简单例子。用来备份用的。 
 
package com.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class  BbsTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        String con;
        try {
            for(int j=5;j<20;j++){
                String url = "http://xxxxxxxxxxxxxxxx.html?page="+j;
                List<String> links = getAllLinks(url);
                for(int i=1;i<links.size();i++){
                    if(map.get(links.get(i))==null){
                        map.put(links.get(i), "true");
                        con = GetWebContent(links.get(i),"utf-8",10000);
                        Document doc = Jsoup.parse(con);
                        String title = getTitle(doc);
                        String content = getContent(doc);
                        System.out.println(title);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
     
     
    /**
     *网页抓取方法
     * @param urlString      要抓取的url地址
     * @param charset        网页编码方式
     * @param timeout        超时时间
     * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a>                抓取的网页内容
     * @throws IOException   抓取异常
     */
    public static String GetWebContent(String urlString, final String charset, int timeout) throws IOException {
        if (urlString == null || urlString.length() == 0) {
            return null;
        }
        urlString = (urlString.startsWith("http://") || urlString.startsWith("https://")) ? urlString : ("http://" + urlString).intern();
        URL url = new URL(urlString);
 
 
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty(
                "User-Agent",
                "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");//增加报头,模拟浏览器,防止屏蔽
        conn.setRequestProperty("Accept", "text/html");//只接受text/html类型,当然也可以接受图片,pdf,*/*任意,就是tomcat/conf/web里面定义那些
 
        conn.setConnectTimeout(timeout);
        try {
            if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        InputStream input = conn.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input,
                charset));
        String line = null;
        StringBuffer sb = new StringBuffer();
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\r\n");
        }
        if (reader != null) {
            reader.close();
        }
        if (conn != null) {
            conn.disconnect();
        }
        return sb.toString();
    }
 
    public static String getContent(Document doc){
        String content = "";
        try {
            String link = ".article_content";
            content = doc.select(link).html();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }
     
    public static String getTitle(Document doc){
        String content = "";
        try {
            String link = "h3";
            content=  doc.select(link).text();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }
    public static List<String> getAllLinks(String url){
        List<String> links = new ArrayList<String>();
        try {
            String con = GetWebContent(url,"utf-8",15000);
            Document doc = Jsoup.parse(con);
            String link = ".blog_list h1 a[class!=category]";
            String href = "abs:href";
            Elements ele = doc.select(link);
            for (Element el : ele) {
                String path = el.attr(href);
                links.add(path);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return links;
    }    
}




板凳
发表于 2014-11-2 18:50:09 | 只看该作者
本帖最后由 乔帮主 于 2014-11-2 18:58 编辑

通过jsoup实现网络爬虫程序,理想的把数据流中的链接分为三种情况:1.带协议头的绝对地址,2.不带协议头的相对地址,3.#自连接。

第一种情况直接访问,第二种情况使用基地址加上资源地址组成绝对地址再访问,第三种情况直接返回。


[AppleScript] 纯文本查看 复制代码
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MainClass {

        private static Set<String> urlSet = new HashSet<String>();

        private static Pattern p = Pattern
                        .compile(
                                        "^(((http|https)://" +
                                        "(www.|([1-9]|[1-9]\\d|1\\d{2}|2[0-1]\\d|25[0-5])" +
                                        "(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}:[0-9]+/)?)" +
                                        "{1}.+){1}quot;,
                                        Pattern.CASE_INSENSITIVE);

        public static void main(String[] args) {
                String baseUrl = "http://www.sina.com";
                spiderInternet(baseUrl, "");
        }

        private static void spiderInternet(String baseUrl, String exUrl) {
                if (baseUrl.endsWith("/") && exUrl.startsWith("/")) {
                        baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
                }
                String new_url = baseUrl + exUrl;
                if (urlSet.contains(new_url)) {
                        return;
                }
                System.out.println(new_url);
                try {
                        Document doc = Jsoup.connect(new_url).get();
                        urlSet.add(new_url);
                        Elements links = doc.select("a[href]");
                        for (Element link : links) {
                                String linkHref = link.attr("href");
                                if (linkHref.equals("#")) {
                                        return;
                                }
                                Matcher matcher = p.matcher(linkHref);
                                if (matcher.matches()) {
                                        spiderInternet(linkHref, "");
                                } else {
                                        spiderInternet(baseUrl, linkHref);
                                }
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

}




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-8 02:49

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表