爬虫
爬虫可以理解为一个从第三方网站获取其数据
的技术。
关于爬虫语言
- 博主是只是对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稍微麻烦一点的爬虫,如抓数据到自己数据库,进行一些模拟网页的操作等等。