Java使用Jsoup写爬虫
安装Jsoup.jar
1.首先我们打开Jsoup官网
2.按照图片这里下载
3.打开IDEA去新建一个空白项目
4.安装.jar包最重要的是把jar放到项目里面使用,所以我们要
简单了解Jsoup
- jsoup提供了一套非常省力的API,可以通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据
- 从一个URL,文件或者字符串中解析HTML
- 使用DOM或CSS选择器来查找,取出数据
- 可以操作HTML元素,属性和文本
- 是基于MIT协议发布的,可放心适用于商业项目!
Jsoup框架中的常用方法
1. connet (String url): 创建一个新的Connection连接对象
2. get(): 取得要解析的一个HTML文件,如果从该URL获取HTML时发生错误,则会抛出IOException异常.
3. parse(String html,String vaseUri): 将输入的HTML解析为一个新的文档(Document),参数baseUri用来相对一个URL转成绝对URL.并指定从哪个网站获取文档.只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少)一个head和一个body的元素
4. parseBodyFragment(): 创建一个空壳的文档,并插入解析过得HTML到Body元素中,如果使用正常的Jsoup.parse(String html)方法,通常也可以得到相同的结果.
5. Document.body(): 能够取得文档body元素的所有子元素,具体功能与doc.getElementsByTag("body")相同
6. Node.atter(String key): 获取一个属性的值
7. Element.text(): 获取一个元素中的文本
8. Element.html()或Node.outerHtml(): 获取元素或属性中的HTML内容
动手实践
经过我们简单初步的了解了一下Jsoup.jar的使用我们可以发现Jsoup相比对元素筛选是非常简单的!直接了当,简简单单so~ easy~
大概初步就是这个样子的
接着我们需要连接上这个网址
这下子就算是连接上了,我们可以输出看看
System.out.printl(element.html());
//添加到后面可以输出测试一下是否连接成功
我们发现可以输出html文档,这就成功了,接下来我们开始找我们需要的内容
我们找到我们需要内容的标签了
这样子一个简单的爬虫就写好了
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
public class test {
public static void main(String[] args) throws IOException {
//因为要抛异常我们要在这里使用throws IOException方法
String URL = "https://pds14.com/xxjj";
//这里以我初中学校的网站做示范
Element element = Jsoup.parse(new URL(URL), 3000);
//延迟三秒开始爬虫
Elements div = element.getElementsByClass("editableContent");
String span = div.text();
System.out.println(span);
}
}
进阶写法
都说了进阶写法肯定要装个13啊,为了学习爬虫自己可以找一些练手的网站,例如我初中的这个网站,就是一个很好的练手道具,当然下面的进阶写法也是围绕着这个网站写的,大家可以看着 试着理解一下
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
public class pds14 {
//主代码
public static void Version() throws IOException {
//检测最新版本
String URL = "http://www.sharking.cc/Version.html";
Element element = Jsoup.parse(new URL(URL), 3000);
String Version = element.getElementsByTag("p").text();
if (Version.equals("0.1")){
System.out.println("版本:" + Version);
}else{
System.out.println("版本已过时,请更新最新版本!");
Scanner in = new Scanner(System.in);//生成一个输入流对象
System.exit(0);
}
}
//爬虫
public static void xygk_xxjj() throws IOException{
//校园概况-学校简介
String URL = "https://pds14.com/xxjj";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements div = element.getElementsByClass("editableContent");
for (Element span : div){
String xxjj = span.getElementsByTag("span").text();
System.out.println(xxjj);
}
}
public static void xygk_ldbz() throws IOException{
//校园概括-领导班子
String URL = "https://pds14.com/ldbz";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByClass("w-list-title").text();
String info = a.getElementsByClass("w-list-info").text();
String img = a.getElementsByTag("img").attr("src");
System.out.println("*******************主题*******************");
System.out.println(title);
System.out.println("图片地址:" + img);
System.out.println("-----------------文章内容-----------------");
System.out.println(info);
System.out.println("******************************************\n\n");
}
}
public static void xygk_xyly() throws IOException{
//校园概括-校园掠影
String URL = "https://pds14.com/xyly";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements div = element.getElementsByClass("smAreaC");
for (Element img : div){
String pic = img.getElementsByTag("img").attr("src");
System.out.println("图片地址:" + pic);
}
}
public static void xwzx_xyxw() throws IOException{
//新闻中心-校园新闻
String URL = "https://pds14.com/xyxw";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String url = a.getElementsByTag("a").attr("href");
System.out.println("-------------------最新新闻--------------------");
System.out.println("文章:" + title);
System.out.println("地址:https://pds14.com" + url);
System.out.println("-----------------------------------------------\n");
}
}
public static void xwzx_tzgg() throws IOException{
//新闻中心-通知公告
String URL = "https://pds14.com/tzgg";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-link");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("---------------最新通知公告---------------");
System.out.println("文章:" + title);
System.out.println("地址:https://pds14.com" + href +"\n");
}
}
public static void djyd_jgzz() throws IOException{
//党建园地-组织机构
String URL = "https://pds14.com/zzjg";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void djyd_djdt() throws IOException{
//党建园地-党建动态
String URL = "https://pds14.com/djdt";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void jxjy_jxdt() throws IOException {
//教学教研-教学动态
String URL = "https://pds14.com/jxdt";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void jxjy_jxyj() throws IOException{
//教学教研-教学研究
String URL = "https://pds14.com/jxyj";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void dytd_dyhd() throws IOException{
//德育天地-德育活动
String URL = "https://pds14.com/dyhd";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void dytd_xlzx() throws IOException{
//德育天地-心理咨询
String URL = "https://pds14.com/xlzx";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void dytd_gzzd() throws IOException{
//德育天地-规章制度
String URL = "https://pds14.com/gzzd";
Element element = Jsoup.parse(new URL(URL), 3000);
Elements li = element.getElementsByClass("w-list-item");
for (Element a : li){
String title = a.getElementsByTag("a").text();
String href = a.getElementsByTag("a").attr("href");
System.out.println("----------------最新文章----------------");
System.out.println("标题:" + title);
System.out.println("地址:https://pds14.com" + href + "\n");
}
}
public static void jsfc_jsdw() throws IOException{
//教师风采-教师队伍
String URL = "https://pds14.com/jsdw";
Element element = Jsoup.parse(new URL(URL), 3000);
//Element div = element.getElementById("smv_con_12_37");
Elements li = element.getElementsByClass("w-list-item");
for (Element el : li){
String title = el.getElementsByClass("w-list-link").text();
String a = el.getElementsByTag("a").attr("href");
//打印
System.out.println("---------------------------------------------------");
System.out.println(title);
System.out.println("https://pds14.com" + a);
}
}
public static void main(String[] args) throws IOException{
while (true){
Version();//检测是否为最新版本
System.out.println("******************************");
System.out.println("|输入\"1\"回车 爬'校园概况'信息|");
System.out.println("|输入\"2\"回车 爬'新闻中心'信息|");
System.out.println("|输入\"3\"回车 爬'党建园地'信息|");
System.out.println("|输入\"4\"回车 爬'教学教研'信息|");
System.out.println("|输入\"5\"回车 爬'德育天地'信息|");
System.out.println("|输入\"6\"回车 爬'教师风采'信息|");
System.out.println("|输入\"7\"回车 爬'招生专栏'信息|");
System.out.println(" |输入\"8\"回车 退出程序| ");
System.out.println("*****************************");
Scanner inputNum = new Scanner(System.in);
int Option = inputNum.nextInt();//记录选项变量
String Option8 = inputNum.nextLine();//记录输入值
//若是输入8就退出程序
if (Option8.equals("8")){
System.exit(0);
}
switch (Option) {
case 1:
System.out.println("输入1 查看'学校简介'");
System.out.println("输入2 查看'领导班子'");
System.out.println("输入3 查看'学校荣誉'");
System.out.println("输入4 查看'机构设置'");
System.out.println("输入5 查看'校园掠影'");
Scanner inuptNum1 = new Scanner(System.in);
int Option1 = inuptNum1.nextInt();//记录选项变量
switch (Option1){
case 1:
xygk_xxjj();//校园概况-学校简介
break;
case 2:
xygk_ldbz();//校园概括-领导班子
break;
case 3:
System.out.println("'学校荣誉'页面未建设好!");
break;
case 4:
System.out.println("'机构设置'页面未建设好!");
break;
case 5:
xygk_xyly();//校园概括-校园掠影
break;
}
break;
case 2:
System.out.println("输入1 查看'校园新闻'");
System.out.println("输入2 查看'通知公告'");
Scanner inputNum2 = new Scanner(System.in);
int Option2 = inputNum2.nextInt();//记录选项变量
switch (Option2){
case 1:
xwzx_xyxw();//新闻中心-校园新闻
break;
case 2:
xwzx_tzgg();//新闻中心-通知公告
break;
}
break;
case 3:
System.out.println("输入1 查看'组织机构'");
System.out.println("输入2 查看'党建动态'");
Scanner inputNum3 = new Scanner(System.in);
int Option3 = inputNum3.nextInt();//记录选项变量
switch (Option3){
case 1:
djyd_jgzz();//党建园地-组织机构
break;
case 2:
djyd_djdt();//党建园地-党建动态
break;
}
break;
case 4:
System.out.println("输入1 查看'教学动态'");
System.out.println("输入2 查看'教学研究'");
Scanner inputNum4 = new Scanner(System.in);
int Option4 = inputNum4.nextInt();//记录选项变量
switch (Option4){
case 1:
jxjy_jxdt();//教学教研-教学动态
break;
case 2:
jxjy_jxyj();//教学教研-教学研究
break;
}
break;
case 5:
System.out.println("输入1 查看'教育活动'");
System.out.println("输入2 查看'心里咨询'");
System.out.println("输入3 查看'规章制度'");
Scanner inputNum5 = new Scanner(System.in);
int Option5 = inputNum5.nextInt();//记录选项变量
switch (Option5){
case 1:
dytd_dyhd();//德育天地-德育活动
break;
case 2:
dytd_xlzx();//德育天地-心里咨询
break;
case 3:
dytd_gzzd();//德育天地-规章制度
break;
}
case 6:
System.out.println("输入1 查看'教师队伍'");
System.out.println("输入2 查看'名师简介'");
Scanner inputNum6 = new Scanner(System.in);
int Option6 = inputNum6.nextInt();//记录选项变量
switch (Option6){
case 1:
jsfc_jsdw();//教学教研-教学动态
break;
case 2:
System.out.println("'名师简介'页面未建设好!");//教学教研-教学研究
break;
}
case 7:
System.out.println("'招生专栏'页面未建设好!");
break;
case 8:
System.exit(0);
}
}
}
}