这几天在学习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. windows下安装配置nginx

    下载nginx-1.0.11.zip, 解压到到nginx目录下 D:\nginx\conf 修改conf下的nginx.conf文件, 默认是80端口,若该端口被占则可以修改 listen 8073 ...

  2. codeforces 622D D. Optimal Number Permutation(找规律)

    D. Optimal Number Permutation time limit per test 1 second memory limit per test 256 megabytes input ...

  3. VScode 为 *.cu文件 添加高亮及c++ intelligence相关操作的方法

    问题:*.cu在VScode不能像*.cc或*.cpp一样在c++及c++ intelligence插件有关键字的高亮以及go to definition等的操作 解决方案:添加*.cu与*.cpp文 ...

  4. FFMPEG(一) 从V4L2捕获摄像头数据

    系列相关博文: FFMPEG(一) 从V4L2捕获摄像头数据 FFMPEG(二) v4l2 数据格式装换 FFMPEG(三) v4l2 数据编码H264 最近在学习FFMPEG,发现网上的很多例子都是 ...

  5. 2017-2018-1 20179203 《Linux内核原理与分析》第五周作业

    攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  6. C/C++文件读写操作总结

    本文主要从两方面介绍读写文件操作,一个是C,另一个是C++. 一.基于C的文件操作. 在ANSI C中对文件操作有两种方式,一种是流式文件操作,另一种是I/O文件操作.下面分别介绍. 1.流式文件操作 ...

  7. xml schema 中如何定义类似Map的结构

    利用xs:unique关键字.在xs:element里添加unique节点,任意命名,然后用xs:selector来选择需要唯一的域, xs:field 里指定特定的字段. 例如:定义所有Item里的 ...

  8. MySQL复制--最快的从库搭建方法(tar包) -转

    最快的从库搭建方法0,准备从库第一次数据备份,临时锁所有表开启窗口1 mysql> flush tables with read lock; Query OK, 0 rows affected  ...

  9. 第 六 课 GO语言常量

    http://www.runoob.com/go/go-constants.html 一 常量 是一个简单值的标识符,在程序运行时,不会被修改的量. 常量中的数据类型只可以是布尔型.数字型(整数型.浮 ...

  10. Java 编程规范,常见规范,命名规范,复杂度

    方法/步骤     1. *不允许把多个短语句写在一行中,即一行只写一条语句 1. 示例:如下例子不符合规范. LogFilename now = null;        LogFilename t ...