这几天在学习Java解析xml,突然想到Dom能不能解析html,结果试了半天行不通,然后就去查了一些资料,发现很多人都在用Jsoup解析html文件,然后研究了一下,写了一个简单的实例,感觉还有很多地方需要润色,在这里分享一下我的实例,欢迎交流指教!

  后续想通过Java把数据导入到Excel或者生成一个报表!

 package gethtml;

 import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; /**从智联招聘获取招聘信息
* @author syskey
* @url 智联招聘网站链接(建议不要更改)
* @city 搜索工作的城市
* @keywrods 搜索工作的相关关键字
*/ public class JsoupHtml { private String url="http://sou.zhaopin.com/jobs/searchresult.ashx?jl="; //智联招聘网站
private String city="西安"; //搜索工作的城市
private String keywords="java"; //搜索工作的关键字
public JsoupHtml(String city,String keywords){
this.city=city;
this.keywords =keywords; } public void getZhiLianWork(){
try {
for (int i=0;i<10;i++) {
System.out.println("*********开始遍历第"+(i+1)+"页的求职信息*********");
Document doc = Jsoup.connect(url+city+"&kw="+keywords+"&p="+(i+1)+"&isadv=0").get();
Element content = doc.getElementById("newlist_list_content_table");
Elements zwmcEls = content.getElementsByClass("zwmc");
Elements gsmcEls = content.getElementsByClass("gsmc");
Elements zwyxEls = content.getElementsByClass("zwyx");
Elements gzddEls = content.getElementsByClass("gzdd");
Elements gxsjEls = content.getElementsByClass("gxsj");
for(int j = 0;j<zwmcEls .size();j++){ System.out.println(
zwmcEls.get(j).tagName("a").text()+"*****"+gsmcEls.get(j).tagName("a").text()+
"*****"+zwyxEls.get(j).tagName("a").text()+"*****"+gzddEls.get(j).tagName("a").text()+
"*****"+gxsjEls.get(j).tagName("a").text());
System.out.println();
}
System.out.println("*********结束遍历第"+(i+1)+"页的求职信息*********"); } } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) { JsoupHtml jHtml = new JsoupHtml("上海", "java");
jHtml.getZhiLianWork(); } }

  更新源代码,支持生成html表格:

package jsouphtml;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; public class JsoupHtml { public static void main(String[] args) {
try {
String url ="http://sou.zhaopin.com/jobs/searchresult.ashx?";
String city ="西安";
String keywords = "java";
BufferedWriter bWriter = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("output.html"),"utf-8"));
bWriter.write(""); File input = new File("input.html");
Document doc2 = Jsoup.parse(input, "UTF-8", "");
Element table = doc2.getElementById("workinfo");
table.text("");
Element theader = table.appendElement("tr");
theader.appendElement("th").text("序号");
theader.appendElement("th").text("职位名称");
theader.appendElement("th").text("公司名称");
theader.appendElement("th").text("职位月薪");
theader.appendElement("th").text("工作地点");
theader.appendElement("th").text("发布日期"); for(int page=0;page<10;page++){
Document doc = Jsoup.connect(url+city+"&kw="+keywords+"&p="+page).get();
Element content = doc.getElementById("newlist_list_content_table");
Elements zwmcEls = content.getElementsByClass("zwmc");
Elements gsmcEls = content.getElementsByClass("gsmc");
Elements zwyxEls = content.getElementsByClass("zwyx");
Elements gzddEls = content.getElementsByClass("gzdd");
Elements gxsjEls = content.getElementsByClass("gxsj"); for(int i = 1;i<zwmcEls .size();i++){
Element tr =table.appendElement("tr");
tr.appendElement("td").text((page+1)+"-"+i);
tr.appendElement("td").text(zwmcEls.get(i).tagName("a").text());
tr.appendElement("td").text(gsmcEls.get(i).tagName("a").text());
tr.appendElement("td").text(zwyxEls.get(i).tagName("a").text());
tr.appendElement("td").text(gzddEls.get(i).tagName("a").text());
tr.appendElement("td").text(gxsjEls.get(i).tagName("a").text());
}
}
System.out.println(doc2.html());
bWriter.write(doc2.html());
bWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

  output.html模板:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>智联工作信息</title>
<style>
body{margin:0;padding:0;}
.header{height:100px;width:100%;background:#39c;color:#fff;text-align:center;line-height:100px;font-size:40px;
font-family:"微软雅黑";}
.body{width:100%;background:#fff;}
.body table{width:90%;margin:0 auto;color:#2e2e2e;border:1px solid #cad9ea; border-collapse: collapse; }
.body table th,td{min-width:50px;max-width:300px;}
.feeter{height:30px;width:100%;background:#39c;color:#fff;text-align:center;line-height:30px;font-size:14px;
font-family:"微软雅黑";}
</style>
</head>
<body>
<div class="header">智联工作信息</div>
<div class="body">
<table class="work" border="1">
<tbody id="workinfo">
</tbody>
</table>
</div>
<div class="feeter">版权所有 翻版必究@2017 sysker</div>
</body>
</html>

  

Java实例——基于jsoup的简单爬虫实现(从智联获取工作信息)的更多相关文章

  1. python3爬虫抓取智联招聘职位信息代码

    上代码,有问题欢迎留言指出. # -*- coding: utf-8 -*- """ Created on Tue Aug 7 20:41:09 2018 @author ...

  2. node.js 89行爬虫爬取智联招聘信息

    写在前面的话, .......写个P,直接上效果图.附上源码地址  github/lonhon ok,正文开始,先列出用到的和require的东西: node.js,这个是必须的 request,然发 ...

  3. [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...

  4. 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件

    代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...

  5. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用

    ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...

  6. python爬虫实战之爬取智联职位信息和博客文章信息

    1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author  ...

  7. Android网络爬虫程序(基于Jsoup)

    摘要:基于 Jsoup 实现一个 Android 的网络爬虫程序,抓取网页的内容并显示出来.写这个程序的主要目的是抓取海投网的宣讲会信息(公司.时间.地点)并在移动端显示,这样就可以随时随地的浏览在学 ...

  8. Java 实现 HttpClients+jsoup,Jsoup,htmlunit,Headless Chrome 爬虫抓取数据

    最近整理一下手头上搞过的一些爬虫,有HttpClients+jsoup,Jsoup,htmlunit,HeadlessChrome 一,HttpClients+jsoup,这是第一代比较low,很快就 ...

  9. 【java爬虫】---爬虫+基于接口的网络爬虫

    爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...

随机推荐

  1. java:Map借口及其子类HashMap四

    java:Map借口及其子类HashMap四 使用非系统对象作为key,使用匿名对象获取数据 在Map中可以使用匿名对象找到一个key对应的value. person: public class Ha ...

  2. 分享知识-快乐自己:揭秘HBase

    揭秘HBase: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...

  3. (转)JSP九大内置对象

    原文出处:http://www.importnew.com/19128.html 虽然现在基本上使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对 ...

  4. php 实现分享到QQ空间 新浪微博

    //分享到新浪微博 $('#blog').click(function(){ window.sharetitle = '<%$info.title%>';//标题 window.share ...

  5. PyQt5布局管理(1)

    Qt布局管理按简单分可分为绝对位置布局和布局管理器布局 一.绝对位置布局: 组件不放在布局管理器中,通过函数setGeometry(x,y,width,height)来设定组件相对其父窗口的位置.其中 ...

  6. linux命令学习笔记(16):which命令

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. locate 配合数据库查看文件位置. f ...

  7. 2017-2018-1 20179215《Linux内核原理与分析》第三周作业

    本次作业分为两部分:第一部分为实验.主要目的是进行基于MYKERNEL的一个简单的时间片轮转多道程序内核代码分析.第二部分为阅读教材,了解LINUX进程调度等. 一.实验部分 实验过程如过程所述:使用 ...

  8. Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题

    本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产生那些问题 一.弹出式线程(Pop-up threads) 以在一个http到达之后一个Service的处理为例子来介 ...

  9. Excel用vlookup方法匹配数据

    (1) VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值.它的基本语法为:     VLOOKUP(查找目标,查找范围,返回值的列数,精确OR模糊查找) ...

  10. MATLAB模糊逻辑工具箱函数

    说明:本文档中所列出的函数适用于Matlab5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档. 1. GUI工具 Anfisedit      打开ANF ...