精华内容
下载资源
问答
  • Java爬虫

    万次阅读 多人点赞 2019-06-11 17:32:29
    由于这里没有用任何的第三方爬虫框架,用的是原生Java的Http协议进行爬取的,所以我写了一个工具类 public class GetJson { public JSONObject getHttpJson ( String url , int comefrom ) throws ...

    为什么我们要爬取数据

    在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,比如当我们做一个项目的时候,需要大量真实的数据的时候,就需要去某些网站进行爬取,有些网站的数据爬取后保存到数据库还不能够直接使用,需要进行清洗、过滤后才能使用,我们知道有些数据是非常真贵的。

    分析豆瓣电影网站

    我们使用Chrome浏览器去访问豆瓣的网站如

    https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
    

    在Chrome浏览器的network中会得到如下的数据
    在这里插入图片描述
    可以看到地址栏上的参数type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0
    其中type是电影tag是标签,sort是按照热门进行排序的,page_limit是每页20条数据,page_start是从第几页开始查询。
    但是这不是我们想要的,我们需要去找豆瓣电影数据的总入口地址是下面这个

    https://movie.douban.com/tag/#/
    

    我们再次的去访问请求终于拿到了豆瓣的电影数据如下图所示
    在这里插入图片描述
    在看下请求头信息
    在这里插入图片描述
    在这里插入图片描述
    最后我们确认了爬取的入口为:

    https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0
    

    创建Maven项目开始爬取

    我们创建一个maven工程,如下图所示
    在这里插入图片描述

    maven工程的依赖,这里只是爬取数据,所以没有必要使用Spring,这里使用的数据持久层框架是mybatis 数据库用的是mysql,下面是maven的依赖

    <dependencies>
        <dependency>
          <groupId>org.json</groupId>
          <artifactId>json</artifactId>
          <version>20160810</version>
        </dependency>
    
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.47</version>
        </dependency>
    
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
        </dependency>
    
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.1</version>
        </dependency>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
      </dependencies>
    

    创建好之后,结构如下所示
    在这里插入图片描述

    首先我们在model包中建立实体对象,字段和豆瓣电影的字段一样,就是请求豆瓣电影的json对象里面的字段

    在这里插入图片描述
    Movie实体类

    public class Movie {
    
        private String id; //电影的id
        private String  directors;//导演
        private String title;//标题
        private String cover;//封面
        private String rate;//评分
        private String casts;//演员
    
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getDirectors() {
            return directors;
        }
    
        public void setDirectors(String directors) {
            this.directors = directors;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getCover() {
            return cover;
        }
    
        public void setCover(String cover) {
            this.cover = cover;
        }
    
        public String getRate() {
            return rate;
        }
    
        public void setRate(String rate) {
            this.rate = rate;
        }
    
        public String getCasts() {
            return casts;
        }
    
        public void setCasts(String casts) {
            this.casts = casts;
        }
    }
    
    

    这里注意的是导演和演员是多个人我没有直接处理。这里应该是一个数组对象。

    创建mapper接口

    public interface MovieMapper {
    
        void insert(Movie movie);
        
        List<Movie> findAll();
    }
    

    在resources下创建数据连接配置文件jdbc.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/huadi
    username=root
    password=root
    

    创建mybatis配置文件 mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <properties resource="jdbc.properties"></properties>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="MovieMapper.xml"/>
        </mappers>
    </configuration>
    

    创建mapper.xml映射文件

    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.cn.scitc.mapper.MovieMapper">
        <resultMap id="MovieMapperMap" type="com.cn.scitc.model.Movie">
            <id column="id" property="id" jdbcType="VARCHAR"/>
            <id column="title" property="title" jdbcType="VARCHAR"/>
            <id column="cover" property="cover" jdbcType="VARCHAR"/>
            <id column="rate" property="rate" jdbcType="VARCHAR"/>
            <id column="casts" property="casts" jdbcType="VARCHAR"/>
            <id column="directors" property="directors" jdbcType="VARCHAR"/>
    
        </resultMap>
    
        <insert id="insert" keyProperty="id" parameterType="com.cn.scitc.model.Movie">
            INSERT INTO movie(id,title,cover,rate,casts,directors)
            VALUES
            (#{id},#{title},#{cover},#{rate},#{casts},#{directors})
        </insert>
        <select id="findAll" resultMap="MovieMapperMap">
            SELECT * FROM movie
        </select>
    </mapper>
    

    由于这里没有用任何的第三方爬虫框架,用的是原生Java的Http协议进行爬取的,所以我写了一个工具类

    public class GetJson {
        public JSONObject getHttpJson(String url, int comefrom) throws Exception {
            try {
                URL realUrl = new URL(url);
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立实际的连接
                connection.connect();
                //请求成功
                if (connection.getResponseCode() == 200) {
                    InputStream is = connection.getInputStream();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    //10MB的缓存
                    byte[] buffer = new byte[10485760];
                    int len = 0;
                    while ((len = is.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                    String jsonString = baos.toString();
                    baos.close();
                    is.close();
                    //转换成json数据处理
                    // getHttpJson函数的后面的参数1,表示返回的是json数据,2表示http接口的数据在一个()中的数据
                    JSONObject jsonArray = getJsonString(jsonString, comefrom);
                    return jsonArray;
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            return null;
        }
    
        public JSONObject getJsonString(String str, int comefrom) throws Exception{
            JSONObject jo = null;
            if(comefrom==1){
                return new JSONObject(str);
            }else if(comefrom==2){
                int indexStart = 0;
                //字符处理
                for(int i=0;i<str.length();i++){
                    if(str.charAt(i)=='('){
                        indexStart = i;
                        break;
                    }
                }
                String strNew = "";
                //分割字符串
                for(int i=indexStart+1;i<str.length()-1;i++){
                    strNew += str.charAt(i);
                }
                return new JSONObject(strNew);
            }
            return jo;
        }
    
    }
    

    爬取豆瓣电影的启动类

    public class Main {
        public static  void  main(String [] args) {
    
            String resource = "mybatis-config.xml"; 定义配置文件路径
            InputStream inputStream = null;
            try {
                inputStream = Resources.getResourceAsStream(resource);//读取配置文件
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//注册mybatis 工厂
    
            SqlSession sqlSession = sqlSessionFactory.openSession();//得到连接对象
    
            MovieMapper movieMapper = sqlSession.getMapper(MovieMapper.class);//从mybatis中得到dao对象
    
            int start;//每页多少条
            int total = 0;//记录数
            int end = 9979;//总共9979条数据
            for (start  = 0; start <= end; start += 20)  {
                try {
    
                    String address = "https://Movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=" + start;
    
                    JSONObject dayLine = new GetJson().getHttpJson(address, 1);
    
                        System.out.println("start:" + start);
                        JSONArray json = dayLine.getJSONArray("data");
                        List<Movie> list = JSON.parseArray(json.toString(), Movie.class);
    
                        if (start <= end){
                            System.out.println("已经爬取到底了");
                            sqlSession.close();
                        }
                        for (Movie movie : list) {
                            movieMapper.insert(movie);
                            sqlSession.commit();
                        }
                        total += list.size();
                        System.out.println("正在爬取中---共抓取:" + total + "条数据");
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }
    

    最后我们运行将所有的数据插入到数据库中。
    在这里插入图片描述

    项目地址

    github

    总结

    爬取豆瓣网站非常的轻松,每页任何的难度,需要注意的是就是start是每页多少条我们发现规则当start=0的时候是20条数据是从0到19条,就这样每次加20条直到爬取完。

    下一篇爬取前程无忧

    爬取前程无忧所有数据

    展开全文
  • java爬虫

    千次阅读 多人点赞 2018-01-20 14:21:52
    Java爬虫

    爬虫思路:

    1. 获取网页源代码

    2. 分析源代码,从源代码中提取有用的信息(可以用正则,也可以用文档节点获取)

    所以根据以上思路在我们的类中应该有两个函数,一个用来获取源代码,另一个用来提取有用的信息。

    爬取的是39健康网

    获取网页源代码的代码如下:

    public static String getHtmlInfoFromUrl(String url, String encoding) {
    		StringBuffer sb = new StringBuffer();
    		InputStreamReader isr = null;
    		try{
    			URL urlObj = new  URL(url);
    			URLConnection uc = urlObj.openConnection();
    			isr = new InputStreamReader(uc.getInputStream(), encoding);
    			BufferedReader br = new BufferedReader(isr);
    			String line = null;
    			while ((line = br.readLine()) != null) {
    				sb.append(line + "\n");
    			}
    		}catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				isr.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		String str = sb.toString();
    	//System.out.println(str);
    		return str;
    		
    	}
    获取了网页源代码之后,我们就应该提取有用的信息了

    按F12


    可以发现每一个医院的所有信息都对应一个li标签,所以我们只需要找到这里面所有的li标签,也就找到了所有我们需要的信息,当然源代码中可能还有其他的li标签,所以当我们的爬取结果出来了之后还需要对其进行一个筛选

    要获取所有li标签,就需要使用以下代码

    	org.jsoup.nodes.Document document = Jsoup.parse(html);
    	Elements elementList = document.getElementsByTag("li");
    这样所有的li标签就在这个elementList里面了。只需要对这个elementList进行遍历就可以取出每一个医院的信息。

    接着分析每一个li标签里面的内容,我们要获取的是医院的图片,和医院的名称。


    上图可以看到,每一个li标签里面都有一个img标签,这个img标签就是需要获取的图片的信息,包括图片的路径,class,只需要获取到这个图片对象,我们就可以得到他的路径,从而得到图片

    同样对与标题每一个医院的标题都包含在yy-msg这个class对应的div下的div下的a标签里面,所以我们只需要根据这个a标签的class=yy-name就可以获得每一个a标签对象,从而获得他的title信息。

    所以提取有用信息的函数的代码如下:

    /**
    	 * @param url  网址
    	 * @param encoding 解码方式
    	 */
    	
    	public static List<HashMap<String, String>> getHospitalInfo(String url, String encoding) {
    		String html = getHtmlInfoFromUrl(url, encoding);
    		org.jsoup.nodes.Document document = Jsoup.parse(html);
    		Elements elementList = document.getElementsByTag("li");
    		List<HashMap<String, String>> maps =  new ArrayList<HashMap<String, String>>();
    		for(org.jsoup.nodes.Element element: elementList){
    			String img = element.getElementsByClass("yy-img").attr("src");
    			String title = element.getElementsByClass("yy-name").attr("title");
    			if(img != "" && title != "") {//筛选li标签
    				HashMap<String, String> map = new HashMap<String, String>();
    				map.put("img", img);
    				map.put("title", title);
    				maps.add(map);
    			}
    		}
    		return maps;
    	}
    需要导入的包有:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    import org.jsoup.Jsoup;
    import org.jsoup.select.Elements;
    主函数测试:

    public static void main(String[] args) {
    		List<HashMap<String, String>> list = getHospitalInfo("http://yyk.39.net/shanxi2/hospitals/", "gbk");
    		for(HashMap<String, String> map: list) {
    			System.out.println("图片 :" + map.get("img"));
    			System.out.println("医院名称:" + map.get("title"));
    			System.out.println("------------------------------------");
    		}
    	}



    jsp页面测试:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import = "com.baidu.parse.util.ParseData" %>
    <%@ page import = "java.util.*" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <% 
    	List<HashMap<String, String>> list = new ParseData().getHospitalInfo("http://yyk.39.net/shanxi2/hospitals/", "gbk");
    	for(HashMap<String, String> map: list) {
    		out.print("<img src = " + map.get("img")+">");
    		out.print("<p>" + map.get("title") + "</p>");
    }
    
    %>
    </body>
    </html>







    展开全文
  • java 爬虫

    2016-12-12 14:30:52
    Httpclient负责发送请求 Jsoup负责解析 综合案例
  • Java爬虫 Java爬虫 Java爬虫 Java爬虫 Java爬虫 Java爬虫 Java爬虫 Java爬虫 Java爬虫
  • Java爬虫基础:Jsoup利用dom方法遍历Document对象。

    先给出网页地址:

    https://wall.alphacoders.com/featured.php?lang=Chinese
    

    主要步骤:

    1. 利用Jsoup的connect方法获取Document对象
    String html = "https://wall.alphacoders.com/featured.php?lang=Chinese";
    Document doc = Jsoup.connect(html).get();
    

    内容过长,就不再显示。

    我们以这部分为例:

    <ul class="nav nav-pills"> 
        <li><a href="https://alphacoders.com/site/about-us" rel="nofollow">About Us</a></li> 
        <li><a href="https://alphacoders.com/site/faq" rel="nofollow">FAQ</a></li> 
        <li><a href="https://alphacoders.com/site/privacy" rel="nofollow">Privacy Policy</a></li> 
        <li><a href="https://alphacoders.com/site/tos" rel="nofollow">Terms Of Service</a></li> 
        <li><a href="https://alphacoders.com/site/acceptable_use" rel="nofollow">Acceptable Use</a></li> 
        <li><a href="https://alphacoders.com/site/etiquette" rel="nofollow">Etiquette</a></li> 
        <li><a href="https://alphacoders.com/site/advertising" rel="nofollow">Advertise With Us</a></li> 
        <li><a id="change_consent">Change Consent</a></li> 
    </ul> 
    
    1. 我们先找到所有的ul:
    Elements elements = doc.getElementsByTag("ul");
    

    输出如下:

    <ul class="nav navbar-nav center"> 
     <li> <a title="Submit Wallpapers" href="https://alphacoders.com/site/submit-wallpaper"><i class="el el-circle-arrow-up"></i>&nbsp;提交</a> </li> 
     <li> <a href="https://alphacoders.com/contest"><i class="el el-gift"></i>&nbsp;精美奖品</a> </li> 
    </ul>
    <ul class="nav navbar-nav navbar-right center"> 
     <li> <a href="language.php?lang=Chinese"> <img src="https://static.alphacoders.com/wa/Chinese-flag.png" alt="Chinese-flag"> &nbsp;&nbsp;中文 &nbsp;&nbsp; </a> </li> 
     <li> <a rel="nofollow" href="https://alphacoders.com/users/login"><i class="el el-user"></i>&nbsp;登录</a> </li> 
     <li> <a href="https://alphacoders.com/users/register"><i class="el el-edit"></i>&nbsp;注册</a> </li> 
    </ul>
    <ul class="pagination"> 
     <li class="active"><a id="prev_page" href="#">&lt;&nbsp;上一页</a></li> 
     <li class="active"><a>1</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">2</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=3">3</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=4">4</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=5">5</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=6">6</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=7">7</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=8">8</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=9">9</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=10">10</a></li> 
     <li><a>...</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=319">319</a></li> 
     <li><a id="next_page" href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">下一页&nbsp;&gt;</a></li> 
    </ul>
    <ul class="pagination"> 
     <li class="active"><a href="#">&lt;&nbsp;上一页</a></li> 
     <li class="active"><a>1</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">2</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=3">3</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=4">4</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=5">5</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=6">6</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=7">7</a></li> 
     <li><a>...</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=319">319</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">下一页&nbsp;&gt;</a></li> 
    </ul>
    <ul class="pagination"> 
     <li class="active"><a href="#">&lt;&lt;&nbsp;</a></li> 
     <li class="active"><a href="#">&lt;&nbsp;上一页</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">下一页&nbsp;&gt;</a></li> 
     <li><a title="末页 (319)" href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=319">&nbsp;&gt;&gt;</a></li> 
    </ul>
    <ul class="pagination"> 
     <li class="active"><a href="#">1</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=2">2</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=3">3</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=4">4</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=5">5</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=6">6</a></li> 
     <li><a href="https://wall.alphacoders.com/featured.php?lang=Chinese&amp;page=7">7</a></li> 
    </ul>
    <ul class="nav nav-pills"> 
     <li><a href="https://alphacoders.com/site/about-us" rel="nofollow">About Us</a></li> 
     <li><a href="https://alphacoders.com/site/faq" rel="nofollow">FAQ</a></li> 
     <li><a href="https://alphacoders.com/site/privacy" rel="nofollow">Privacy Policy</a></li> 
     <li><a href="https://alphacoders.com/site/tos" rel="nofollow">Terms Of Service</a></li> 
     <li><a href="https://alphacoders.com/site/acceptable_use" rel="nofollow">Acceptable Use</a></li> 
     <li><a href="https://alphacoders.com/site/etiquette" rel="nofollow">Etiquette</a></li> 
     <li><a href="https://alphacoders.com/site/advertising" rel="nofollow">Advertise With Us</a></li> 
     <li><a id="change_consent">Change Consent</a></li> 
    </ul>
    
    1. 可以发现class为"nav nav-pills"的只有一个,我们找到它:
    Elements elements = doc.getElementsByTag("ul");
    		//System.out.println(elements);
    Element tempElement = null;
    for(Element element : elements) {
    	if (element.className().equals("nav nav-pills")) {
    		tempElement = element;
    		//System.out.println(element.className());
    		break;
    	}
    }
    
    1. 循环遍历这个ul,输出其中每一个li里每一个a的href和rel属性:
    Elements li = tempElement.getElementsByTag("li");
    for(Element element : li) {
    	Elements element2 = element.getElementsByTag("a");
    	for(Element element3 : element2) {
    		String hrefString = element3.attr("href");
    		String relString = element3.attr("rel");
    		if(hrefString != "" && relString != "") {
    			System.out.println("href=" + hrefString + " " + "rel=" + relString);
    		}
    	}
    }
    

    最终结果:

    href=https://alphacoders.com/site/about-us rel=nofollow
    href=https://alphacoders.com/site/faq rel=nofollow
    href=https://alphacoders.com/site/privacy rel=nofollow
    href=https://alphacoders.com/site/tos rel=nofollow
    href=https://alphacoders.com/site/acceptable_use rel=nofollow
    href=https://alphacoders.com/site/etiquette rel=nofollow
    href=https://alphacoders.com/site/advertising rel=nofollow
    

    完整代码:

    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import java.io.IOException;
    import org.jsoup.Jsoup;
    
    
    /** 
     * @ClassName: Jsoup_Test
     * @description: 
     * @author: KI
     * @Date: 2020年8月17日 下午8:15:14
     */
    
    public class Jsoup_Test {
    
    	public static void main(String[] args) throws IOException {
    		// TODO 自动生成的方法存根
    		
    		String html = "https://wall.alphacoders.com/featured.php?lang=Chinese";
    		Document doc = Jsoup.connect(html).get();
    		
    		System.out.println(doc);
    		Elements elements = doc.getElementsByTag("ul");
    		//System.out.println(elements);
    		Element tempElement = null;
    		for(Element element : elements) {
    			if (element.className().equals("nav nav-pills")) {
    				tempElement = element;
    				//System.out.println(element.className());
    				break;
    			}
    		}
    		System.out.println(tempElement);
    		Elements li = tempElement.getElementsByTag("li");
    		for(Element element : li) {
    			Elements element2 = element.getElementsByTag("a");
    			for(Element element3 : element2) {
    				String hrefString = element3.attr("href");
    				String relString = element3.attr("rel");
    				if(hrefString != "" && relString != "") {
    					System.out.println("href=" + hrefString + " " + "rel=" + relString);
    				}
    			}
    		}		
    
    	}
    
    }
    
    
    
    展开全文
  • Java 爬虫

    千次阅读 2014-02-26 16:27:26
    网络数据抓取框架 TinySpider ...TinySpider是一个基于Tiny HtmlParser的网络数据抓取框架。 Maven引用坐标: org.tinygrouptinyspider0.0.12 网络爬虫,一般用在全文检索或内容获取上面。 ..
    • 原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time
    • 网络数据抓取框架 TinySpider

      TinySpider是一个基于Tiny HtmlParser的网络数据抓取框架。 Maven引用坐标: <dependency><groupId>org.tinygroup</groupId><artifactId>tinyspider</artifactId><version>0.0.12<version></dependency> 网络爬虫,一般用在全文检索或内容获取上面。 ... 更多TinySpider信息

    • 脚本编程语言 CrawlScript

      JAVA平台上的网络爬虫脚本语言 CrawlScript 网络爬虫即自动获取网页信息的一种程序,有很多JAVA、C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一个简单 的操作。鉴于这个问题,我们开发了CrawlScript这种脚本语言,程... 更多CrawlScript信息

    • Nutch的AJAX页面抓取插件 nutch-htmlunit

      Apache Nutch自带的Http Fetch组件对于AJAX类型页面基本是熟视无睹,因此基于Htmlunit组件实现Nutch Plugin形式提供AJAX类型页面抓取解析支持。 更多nutch-htmlunit信息

    • 网络爬虫 goodcrawler

      goodcrawler(GC) 网络爬虫 GC是一个垂直领域的爬虫,同时也是一个拆箱即用的搜索引擎。 GC基于httpclient、htmlunit、jsoup、elasticsearch。 GC的特点: 1、具有DSL特性的模板。 2、分布式、可扩展。 3、辛亏有htmlunit,它能较好地支持javascript。 5、合... 更多goodcrawler信息

    • 垂直爬虫 webmagic

      webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。 以下是爬取oschina博客的一段代码: Spider.create(new SimplePageProcessor("http://my.oschina.net/","http://my.oschina.net/*/blog/*")).t...webmagic 更多webmagic信息

      最近更新: webmagic 0.4.2发布,Java爬虫框架 发布于 2个月前

    • 检索爬虫框架 heyDr

      heyDr是一款基于java的轻量级开源多线程垂直检索爬虫框架,遵循GNU GPL V3协议。 用户可以通过heyDr构建自己的垂直资源爬虫,用于搭建垂直搜索引擎前期的数据准备。heyDr 更多heyDr信息

    • opm-server-mirror

      代码更新 2009-11-25: 加入反爬虫功能。直接Web访问服务器将跳转到Google。 使用方法 下载index.zip 解压index.zip得到index.php 将index.php传到支持php和cURL的国外服务器上 打开 http://www.your_website.com/your_folder_if_any/ ,如果页面跳转到Goo... 更多opm-server-mirror信息

    • Java网络蜘蛛/网络爬虫 Spiderman

      Spiderman - 又一个Java网络蜘蛛/爬虫 Spiderman 是一个基于微内核+插件式架构的网络蜘蛛,它的目标是通过简单的方法就能将复杂的目标网页信息抓取并解析为自己所需要的业务数据。 主要特点 * 灵活、可扩展性强,微内核+插件式架构,Spiderman提供了多达 ... 更多Spiderman信息

    • web 搜索和爬虫 Leopdo

      用JAVA编写的web 搜索和爬虫,包括全文和分类垂直搜索,以及分词系统 更多Leopdo信息

    • OWASP AJAX Crawling Tool

      OWASP AJAX Crawling Tool (FuzzOps-NG) OWASP出品的ajax爬虫,java编写,开放源代码。 更多OWASP AJAX Crawling Tool信息

    • Ajax爬虫和测试 Crawljax

      Crawljax: java编写,开放源代码。 Crawljax 是一个 Java 的工具用于自动化的爬取和测试现在的 Ajax Web 应用。 更多Crawljax信息

    • Common Crawl

      commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现。 Common Crawl 提供一个示例程序 BasicArcFileReaderSample.java (位于 org.commoncrawl.samples) 用来配置 InputFormat。... 更多Common Crawl信息

    • 数据收集系统 Chukwa

      什么是 Chukwa,简单的说它是一个数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS 中供 Hadoop 进行各种 MapReduce 操作。Chukwa 本身也提供了很多内置的功能,帮助我们进行数据的收集和整理。 为了更加简单直观的展示 ...Chukwa 更多Chukwa信息

    • 简易HTTP爬虫 HttpBot

      HttpBot 是对 java.net.HttpURLConnection类的简单封装,可以方便的获取网页内容,并且自动管理session,自动处理301重定向等。虽然不能像HttpClient那样强大,支持完整的Http协议,但却非常地灵活,可以满足我目前所有的相关需求。... 更多HttpBot信息

    • Web挖掘工具包 Bixo

      Bixo 是一个开放源码的Web挖掘工具包,基于 Hadoop 开发和运行。通过建立一个定制的级联管总成,您可以快速创建Web挖掘是专门为特定用例优化的应用程序。 更多Bixo信息

    • Web爬虫程序 CrawlZilla

      crawlzilla 是一個幫你輕鬆建立搜尋引擎的自由軟體,有了它,你就不用依靠商業公司的收尋引擎,也不用再煩惱公司內部網站資料索引的問題 由 nutch 專案為核心,並整合更多相關套件,並開發設計安裝與管理UI,讓使用者更方便上手。 crawlzilla 除了爬取基本...CrawlZilla 更多CrawlZilla信息

    • 网页爬虫 Ex-Crawler

      Ex-Crawler 是一个网页爬虫,采用 Java 开发,该项目分成两部分,一个是守护进程,另外一个是灵活可配置的 Web 爬虫。使用数据库存储网页信息。 更多Ex-Crawler信息

    • 网页抓取工具 PlayFish

      playfish是一个采用java技术,综合应用多个开源java组件实现的网页抓取工具,通过XML配置文件实现高度可定制性与可扩展性的网页抓取工具 应用开源jar包包括httpclient(内容读取),dom4j(配置文件解析),jericho(html解析),已经在 war包的lib下。 这个项... 更多PlayFish信息

    • web爬虫 jcrawl

      jcrawl是一款小巧性能优良的的web爬虫,它可以从网页抓取各种类型的文件,基于用户定义的符号,比如email,qq. 更多jcrawl信息

    • Java多线程Web爬虫 Crawler4j

      Crawler4j是一个开源的Java类库提供一个用于抓取Web页面的简单接口。可以利用它来构建一个多线程的Web爬虫。 示例代码: import java.util.ArrayList; import java.util.regex.Pattern; import edu.uci.ics.crawler4j.crawler.Page; import edu.uci.ics.cr... 更多Crawler4j信息

    展开全文
  • 爬虫搜索,简单的搜索引擎,java爬虫,搜索引擎例子,爬虫demo,java实现互联网内容抓取,搜索引擎大揭密.java爬虫程序。web搜索。爬虫程序。sigar搜索,定时搜索互联网内容信息。
  • java爬虫代码

    2017-05-24 10:01:18
    java爬虫代码
  • java爬虫视频爬虫工具

    2019-03-07 11:46:26
    java爬虫(视频爬虫源码);可以支持爬各大视频网站;支持:优酷、土豆、酷6、6间房、搜狐、新浪 等视频网站的 视屏提取;只需要输入网站的URL 即可提取当前页面的所有视频;
  • java爬虫.rar

    2020-07-16 15:13:14
    Java爬虫 爬取微信小程序 爬取微信小程序 将商品数据导出到execl。案例!有相关代码注释。Java爬虫
  • Java爬虫视频

    2017-08-15 10:39:38
    各种Java爬虫视频(全)
  • Java爬虫,信息抓取的实现 完整实例源码

    万次下载 热门讨论 2014-04-09 15:56:19
    Java爬虫,信息抓取的实现 详细完整源码实例打包给大家,需要的可以下载下载学习!!!
  • 百度贴吧java爬虫

    2020-06-27 06:31:17
    一个简单的百度贴吧java爬虫,可以爬取用户内容,用户名和楼层 一个简单的百度贴吧java爬虫,可以爬取用户内容,用户名和楼层

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,721
精华内容 31,088
关键字:

java爬虫

java 订阅
爬虫 订阅