Java实现简单爬虫

爬虫

爬虫可以理解为一个从第三方网站获取其数据的技术。

关于爬虫语言

  • 博主是只是对Java有一定浅显的见解,对于很多语言不敢造次。在这里说一下关于爬虫常用的语言。最常用的爬虫语言是python,python有完善的爬虫框架,获取网页数据十分方便,而爬虫时候很多时候都会出现较长时间的延迟和等待,python的多线程、进程模型比较完善所以多数人都会用python进行爬虫。
  • 本文简单聊一下Java爬虫入门,便于大家理解。

Java从网页去抓取数据 肯定涉及到java.net.URL而从URL中读取到的数据(本文是利用字符流获取url返回的),是需要转换才能为我们所用。目前较多的是json格式,json格式相对html格式来说更为简单,本文介绍的是返回的html格式。

Jsoup

处理html格式返回就需要用到Jsoup。jsoup 是Java的html解析器,可直接解析某个URL地址、HTML文本内容。具体的jar包可以自行下载。

  • 这里我拿以下网站作为例子。这个网站没有过多的js,DOM结构上也是比较基础的 ur >> li 等,便于理解和爬数据。比如我们想获取该网址左边的书籍分类里面的数据。首先开启调试模式,刷新页面查看发送了什么请求。如图所示,向http://bestcbooks.com/发送了一个GET请求没有带什么参数。

这里写图片描述

我们可以通过如下方式,模拟这样的一个请求,然后从请求的返回中去解析出我们需要的数据。

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

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by wingzing on 2018/8/8.
 */
public class WingZingDemo {
    public static void main(String[] args) {
        String httpUrl = "http://bestcbooks.com/"; //需要爬的网址
        String html;
        try {
            StringBuffer sbf = new StringBuffer();
            URL url = new URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.setRequestMethod("GET");  //设置请求方式 可设置POST 注意一定要大写
            //connection.setRequestProperty("Cookie", cookie); //设置请求头参数 如Cookie、Host等等
            connection.connect(); //开启连接
            InputStream is = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String strRead = null;
            while ((strRead = reader.readLine()) != null) { //读取返回
                sbf.append(strRead);
                sbf.append("\r\n");
            }
            reader.close();//关闭缓冲字符流
            html = sbf.toString();
            //System.out.println(html);
            Document doc = Jsoup.parse(html);//将爬来的html格式的字符串转成Document从而获取其中需要的数据
            Element ul = doc.getElementById("category-list");//取得ID为category-list的元素
            Elements liList = ul.getElementsByTag("li");//取得其中的li标签 为一个集合
            for(Element li:liList){ //循环该li集合
                System.out.println(li.getElementsByTag("a").get(0).text());//取得每个li中的a标签的值 进行输出
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

代码中的注释已经写的非常清楚了,可以复制这个代码自己运行一下,通过debug来一步一步看其中的值。

总的来说,首先获取页面加载或执行的时送的请求,并判断是否需要参数,需要哪些参数,进行一个模拟然后得到该请求的返回,将请求解析出来,获取我们需要的数据。

以上就是Java实现简单的爬虫,只是为了没有接触过Java来爬虫的朋友学习一下。后续我会给大家写一下Java稍微麻烦一点的爬虫,如抓数据到自己数据库,进行一些模拟网页的操作等等。

猜你喜欢

转载自blog.csdn.net/WINGZINGLIU/article/details/81542702