免费网站站长推广网站排名外包
web/
2025/10/4 6:59:08/
文章来源:
免费网站站长推广,网站排名外包,深圳响应式建站,linux7 下载wordpressJava爬虫 爬取某招聘网站招聘信息 一、系统介绍二、功能展示1.需求爬取的网站内容2.实现流程2.1数据采集2.2页面解析2.3数据存储 三、其它1.其他系统实现 一、系统介绍
系统主要功能#xff1a;本项目爬取的XX招聘网站
二、功能展示
1.需求爬取的网站内容 2.实现流程
爬虫… Java爬虫 爬取某招聘网站招聘信息 一、系统介绍二、功能展示1.需求爬取的网站内容2.实现流程2.1数据采集2.2页面解析2.3数据存储 三、其它1.其他系统实现 一、系统介绍
系统主要功能本项目爬取的XX招聘网站
二、功能展示
1.需求爬取的网站内容 2.实现流程
爬虫可以分为三个模块数据采集数据解析数据保存
项目结构
2.1数据采集
数据采集主要是通过HttpClient去请求url获取网页源码。 注除了HttpClient还可以用HttpUtil具体使用方式可以百度得到这里贴出两种工具的使用代码实现的功能是一样的 在pom.xml配置相关依赖 HttpClient:
dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.9/version
/dependencyHttpUtil:
dependencygroupIdnet.sourceforge.htmlunit/groupIdartifactIdhtmlunit/artifactIdversion2.27/version
/dependency两种工具看个人喜好选择本项目选择的是HttpClient.建议使用htmlunithtmlunit爬内容相对齐全。 HTTPClient与HttpUtil的使用方法 HTTPClient
package com.master.controller;import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpClientDownPage {//设置代理模范浏览器private static final String USER_AGENT Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36;public static String sendGet(String url){//1.生成httpclient相当于该打开一个浏览器CloseableHttpClient httpClient HttpClients.createDefault();//设置请求和传输超时时间RequestConfig requestConfig RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();CloseableHttpResponse response null;String html null;//2.创建get请求相当于在浏览器地址栏输入 网址HttpGet request new HttpGet(url);try {request.setHeader(User-Agent,USER_AGENT);request.setConfig(requestConfig);//3.执行get请求相当于在输入地址栏后敲回车键response httpClient.execute(request);//4.判断响应状态为200进行处理if(response.getStatusLine().getStatusCode() HttpStatus.SC_OK) {//5.获取响应内容HttpEntity httpEntity response.getEntity();html EntityUtils.toString(httpEntity, GBK);} else {//如果返回状态不是200比如404页面不存在等根据情况做处理这里略System.out.println(返回状态不是200);System.out.println(EntityUtils.toString(response.getEntity(), utf-8));}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//6.关闭HttpClientUtils.closeQuietly(response);HttpClientUtils.closeQuietly(httpClient);}return html;}
}
HttpUtil
package com.master.controller;import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;public class HttpUtilDownPage {//新建一个模拟谷歌Chrome浏览器的浏览器客户端对象private static final WebClient webClient new WebClient(BrowserVersion.CHROME);public static String sendGet(String url){//当JS执行出错的时候是否抛出异常, 这里选择不需要webClient.getOptions().setThrowExceptionOnScriptError(false);//当HTTP的状态非200时是否抛出异常, 这里选择不需要webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);webClient.getOptions().setActiveXNative(false);//是否启用CSS, 因为不需要展现页面, 所以不需要启用webClient.getOptions().setCssEnabled(false);//很重要启用JSwebClient.getOptions().setJavaScriptEnabled(true);//很重要设置支持AJAXwebClient.setAjaxController(new NicelyResynchronizingAjaxController());HtmlPage page null;try {page webClient.getPage(url);} catch (Exception e) {e.printStackTrace();}finally {webClient.close();}//异步JS执行需要耗时,所以这里线程要阻塞30秒,等待异步JS执行结束webClient.waitForBackgroundJavaScript(30000);//直接将加载完成的页面转换成xml格式的字符串String pageXml page.asXml();return pageXml;}
}
上面两种方法都可请求到页面源码信息这里用的是字符串接收下来。
注如果使用HttpClient,有些网页无法获取到全部的页面代码信息,可换成HttpUtil尝试如果还是不行那可能是该网站采取了一些反爬措施需要小伙伴自己动脑解决了
2.2页面解析
页面源码请求下来了那么就轮到页面解析模块出厂了。
我们看到的网页本质上都是由一个个标签嵌套组合而成再加上jscss等渲染成一个美观的页面但是我们需要的的数据所以摒除绚丽的外观我们只需要解析出目标数据所在的标签就行了。
解析页面的方法也有多种有htmlcleanerJsoup等这里使用的是JsoupHTMLCleaner使用标签的Xpath解析Xpath可以在浏览器中 进行一下操作 ctrlshiftc然后找到目标标签点击鼠标右键选择copy,会有cpoy Xpath选项即可具体玩转需要小伙伴自己去探索因为笔者也不懂。。。
使用Jsoup在springboot中只需配置相关依赖便可使用 !--Jsoup--dependencygroupIdorg.jsoup/groupIdartifactIdjsoup/artifactIdversion1.11.3/version/dependency将获取的网页信息通过Jsoup.parse(content)方法转化成Document对象传到解析模块解析模块相关代码 private void paraseList(Document document) throws InterruptedException {//根据网页标签解析源码Elements elements document.getElementsByClass(sojob-item-main clearfix);for(Element element:elements){Elements elements1 element.select(h3);String job elements1.attr(title);Elements elements2 element.select(.condition);String all elements2.attr(title);String[] a all.split(_);String salary a[0];String address a[1];String require a[2]a[3];Elements elements3 (element.select(.temptation)).select(span);String welfare elements3.text();//公司名称Elements elements4 (element.select(.company-name)).select(a);String companyname elements4.text();Job jobs new Job();//kay是字段名 value是字段值jobs.setJob(job);jobs.setSalary(salary);jobs.setAddress(address);jobs.setCompanyname(companyname);jobs.setRequire(require);jobs.setWelfare(welfare);list.add(jobs);}}这里是解析页面获取想要的职位信息将解析的数据封装到QCPage中效果图如下
2.3数据存储
数据解析完就差数据存储了。 笔者采用了excel存储 public void saveXls(List list,String name) {//第一步创建一个workbook对应一个excel文件HSSFWorkbook workbook new HSSFWorkbook();//第二部在workbook中创建一个sheet对应excel中的sheetHSSFSheet sheet workbook.createSheet(招聘表);//第三部在sheet表中添加表头第0行老版本的poi对sheet的行列有限制HSSFRow row sheet.createRow(0);//第四步创建单元格设置表头HSSFCell cell row.createCell(0);cell.setCellValue(招聘公司);cell row.createCell(1);cell.setCellValue(岗位名称);cell row.createCell(2);cell.setCellValue(岗位薪资);cell row.createCell(3);cell.setCellValue(工作地点);cell row.createCell(4);cell.setCellValue(岗位要求);cell row.createCell(5);cell.setCellValue(福利待遇);//第五步写入实体数据实际应用中这些数据从数据库得到,对象封装数据集合包对象。对象的属性值对应表的每行的值for (int i 0; i list.size(); i) {HSSFRow row1 sheet.createRow(i 1);//创建单元格设值row1.createCell(0).setCellValue(((Job) list.get(i)).getCompanyname());row1.createCell(1).setCellValue(((Job) list.get(i)).getJob());row1.createCell(2).setCellValue(((Job) list.get(i)).getSalary());row1.createCell(3).setCellValue(((Job) list.get(i)).getAddress());row1.createCell(4).setCellValue(((Job) list.get(i)).getRequire());row1.createCell(5).setCellValue(((Job) list.get(i)).getWelfare());}File file new File(D:/name.xls);if (file.exists()) {file.delete();}//将文件保存到指定的位置try {file.createNewFile();FileOutputStream fos new FileOutputStream(file);workbook.write(fos);System.out.println(写入成功);workbook.close();} catch ( IOException e) {e.printStackTrace();}}效果
三、其它
1.其他系统实现
JavaSwing实现学生选课管理系统 JavaSwing图书管理系统
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86652.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!