Java实例——基于jsoup的简单爬虫实现(从智联获取工作信息)
这几天在学习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的简单爬虫实现(从智联获取工作信息)的更多相关文章
- python3爬虫抓取智联招聘职位信息代码
上代码,有问题欢迎留言指出. # -*- coding: utf-8 -*- """ Created on Tue Aug 7 20:41:09 2018 @author ...
- node.js 89行爬虫爬取智联招聘信息
写在前面的话, .......写个P,直接上效果图.附上源码地址 github/lonhon ok,正文开始,先列出用到的和require的东西: node.js,这个是必须的 request,然发 ...
- [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...
- 【Java/JDBC】利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件
代码下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-2.rar 这篇还不够完善,请看更完善的续篇 ...
- Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用
ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...
- python爬虫实战之爬取智联职位信息和博客文章信息
1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author ...
- Android网络爬虫程序(基于Jsoup)
摘要:基于 Jsoup 实现一个 Android 的网络爬虫程序,抓取网页的内容并显示出来.写这个程序的主要目的是抓取海投网的宣讲会信息(公司.时间.地点)并在移动端显示,这样就可以随时随地的浏览在学 ...
- Java 实现 HttpClients+jsoup,Jsoup,htmlunit,Headless Chrome 爬虫抓取数据
最近整理一下手头上搞过的一些爬虫,有HttpClients+jsoup,Jsoup,htmlunit,HeadlessChrome 一,HttpClients+jsoup,这是第一代比较low,很快就 ...
- 【java爬虫】---爬虫+基于接口的网络爬虫
爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...
随机推荐
- 动态规划 最长回文子串 leetcode5
public static String longestPalindrome(String s) { if(null==s||s.length()==0) return s; int n=s.leng ...
- Java中常见的几个乱码问题以及解决方法
1.ajax--URL中的参数含中文,后台接受的参数出现乱码 解决方法: 第一步:在javascript中,对url进行两次编码 url = "http://localhost:8080/M ...
- 【二叉树的递归】06填充每个节点中的下一个正确的指针【Populating Next Right Pointers in Each Node】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树 struct Tr ...
- I.MX6 Busybox watchdog
/************************************************************************* * I.MX6 Busybox watchdog ...
- js基础:关于Boolean() 与 if
最近面试比较多,但每次我问这个问题的时候,答出来的同学并不多 var a = 0; if( a) { alert(1); } 这个问题有部分人会答alert(1), 有些人会答不执行. 结果是不执 ...
- javascript之原型prototype
理解JavaScript原型 http://blog.jobbole.com/9648/ Web程序员应该知道的Javascript prototype原理 http://www.leonzhang. ...
- EXPLAIN 命令
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- POJ2080:Calendar(计算日期)
Calendar Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12842 Accepted: 4641 Descrip ...
- flume入门之一:flume 安装及测试
http://flume.apache.org/ flume下载:http://mirror.bit.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin. ...
- 三、kafka主要配置
1.Broker配置 <ignore_js_op> 2.Consumer主要配置 <ignore_js_op> 3.Producer主要配置 <ignor ...