javaAPI爬取全国高校录取情况以及院校图片
首先,为了能够能够爬取全国所有高校的录取情况以及其他信息,需要做到以下步骤:
1找到要爬取的所有大学的url
2开始爬取院校的cid、院校主页url、cname存入数据库,便于后面进一步利用这些关系爬取其他信息
3利用数据库中cid拼接url的方式爬取院校录取批次信息
4利用数据库中cid拼接url找到所有图片再发送httpclient下载图片
爬取全国院校以及cid存入数据库
该页面是全国高校的主页:https://www.baokaodaxue.com/bkdx/search/college
进入该页面之后可以利用谷歌的开发者工具,找到这个块标签,然后提取出其中想要的元素
主要代码如下
//线程池
private static final ExecutorService executorService = Executors.newCachedThreadPool();
//阻塞队列,用于存放商品盒子li
private static final BlockingQueue<Element> queueLi = new ArrayBlockingQueue<Element>(100);
//阻塞队列,用于存放university
private static final BlockingQueue<University> queuePhone = new ArrayBlockingQueue<University>(100);
//爬取的首页
private String url ="https://www.baokaodaxue.com/bkdx/search/college?dq=&type=&bz=&kp=&keywd=&page=1";
//开始爬取
public void start() throws IOException {
final String sql = "insert into university(name,url,cid) values(?,?,?)";
for (int i = 0; i < 10; i++) {
executorService.execute(new Runnable() {
public void run() {
QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
while (true) {
try {
University university = queuePhone.take();
queryRunner.update(sql,university.getName(),university.getUrl(),university.getCid());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
});
}
//创建10个消费者(解析队列中存放的li)
for (int i = 0; i < 10; i++) {
executorService.execute(new Runnable() {
public void run() {
//从队列中取出li进行解析
while (true) {
Element li = null;
try {
li = queueLi.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
University university = parseLi(li);
if (university != null) {
queuePhone.offer(university);
}
}
}
});
}
//获取首页
CloseableHttpResponse indexRes = sendGet(url);
//解析结果
parseIndex(indexRes, 1);
}
//发送get请求,获取响应结果
public CloseableHttpResponse sendGet(String url) throws IOException