通过Java爬虫实现51job申请职位

抓包部分

1.抓到申请职位的封包

随便搜索一个职业(我这里搜索Java)
启动抓包后点申请职位,抓到下面这个包:

投递成功的封包

可以看到这就是我们需要的封包
打开调试窗口,分析一下请求地址
在这里插入图片描述

这个地址有时间戳,可能不能重复提交。我们手动发送请求试一下
在这里插入图片描述

可以看到他再次申请了刚才的职位,说明这个地址可以重复请求

2.尝试使用发送封包的方式申请一个职位

通过上文我们对封包的分析可以看到,这个地址中包含了一个jobid标签以及他的值,我们查看这个网页的源代码,查找jobid:
在这里插入图片描述
每个职位都对应一个jobid,即我们可以通过更换jobid来实现申请职位

把这个jobid的值替换到我们封包的请求地址中
在这里插入图片描述
然后发送请求:
在这里插入图片描述

?what
回到网页中找到这个id对应的职位,按下申请,发现跳转到了响应正文中的网址,是一个填志愿的网站。
好的,这个网站并不是所有公司职位都可以一键申请。

但并不妨碍我们继续,我们换一个jobid再次发送请求:
在这里插入图片描述
成功了!

Java部分

3.使用Java发送请求

直接上代码

  • getsend类

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
*这个
*/



public class getsend {
	public static String sendGet(String url) {

		String result = "";

		BufferedReader in = null;
		try {

			String urlNameString = url;

			// 打开和URL之间的连接
			URL realUrl = new URL(urlNameString);
			URLConnection connection = realUrl.openConnection();
			
			// 设置请求属性
			connection.setRequestProperty("accept", "*/*");

			connection.setRequestProperty("connection", "Keep-Alive");
			
			// 浏览器标识
			connection.setRequestProperty("user-agent",
					"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0");
			
			// 提交cookie
			connection.setRequestProperty("Cookie",
					"此处为提交的Cookie,因为太多了所以不写出来了");

			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));	
			
			String line;
			while ((line = in.readLine()) != null) {	//读出流中的数据

				result += line;

			}
			
		} catch (Exception e) {

			System.out.println("发送GET请求出现异常!" + e);

			e.printStackTrace();

		} // 使用finally块来关闭输入流

		finally {
			try {
				if (in != null) {

					in.close();

				}

			} catch (Exception e2) {

				e2.printStackTrace();

			}

		}
		return result;

	}
}
  • main主方法
public class testsend {

	public static void main(String[] args) {
		getsend getsend = new getsend();
		
		System.out.println(getsend.sendGet(		//请求地址
				"https://i.51job.com/delivery/delivery.php?rand=0.0901649582236812&jsoncallback=jQuery18308038288213724798_1619579431652&jobid=(118850218%3A0)&prd=search.51job.com&prp=sou_sou_soulb&cd=search.51job.com&cp=search_list&resumeid=&cvlan=&coverid=&qpostset=&elementname=delivery_jobid_126898406&deliverytype=1&deliverydomain=%2F%2Fi.51job.com&language=c&imgpath=%2F%2Fimg01.51jobcdn.com&_=1619579441083"));
	}

}

执行,输出:在这里插入图片描述

OK,现在我们只需要爬取每个职位的jobid再添加到请求地址内即可实现申请职位

4.使用Java实现申请职位

  1. 爬取jobid

用Jsoup取出整个网页源码
Jsoup.connect(url).get();在这里插入图片描述
可以发现职位信息全部存在一个js文本里,所以我们这里使用字符处理来取出jobid
在这里插入图片描述
这里用到了两个方法:

  • 文本位置搜索 indexOf("欲搜索的文本",起始搜索位置)
  • 子文本取出 substring(起始位置,结束位置)


    即我们要使用两次indexOf()方法分别找出我们需要的值的起始位置与结束位置,然后把这两个位置传进substring()中。


    这里注意indexOf()这个方法还有第二个参数,即"起始搜索位置",我们创建一个"起始搜索位置"的变量,让他等于substring()中的结束位置,这样在循环中每次进行文本位置搜索时,都是从上一个jobid的下面开始搜索,这样就可以达到将整个网页的jobid全部取出的目的。

代码如下:

//欲处理的字符串:> "jobid":"130114485","coid" <
//要取出的值:130114485

int 起始位置 =  网页源代码.indexOf("jobid",起始搜索位置) + "jobid\":\"".length();	
											\\这里加上> jobid":" <这个字符串的长度是为了直接取出130114485,否则取出的就是jobid":"130114485
											
int 结束位置 =  网页源代码.indexOf("\",\"coid",起始搜索位置);//这里取出的是130114485之后的字符串> ","coid" <的位置,也就是我们需要的结束位置

网页源代码.substring(起始位置, 结束位置)//取出jobid

Head_i = (结束位置 + 1); //结束位置+1,防止原地搜索

把jobid取出后,我们就可以开始申请职位操作了

实例化getsend类,把jobid传进去:
在这里插入图片描述
运行:

在这里插入图片描述
手机要静音两天了在这里插入图片描述

  • 以上即为本案例全部内容,如有纰漏或错误,还请指出


    本程序仅为学习交流,无意冒犯任何人,给您带来的不便我很抱歉
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值