java爬虫实战——实现简单的爬取网页数据

故事的开头
在这里插入图片描述
虽然我们程序员不干爬虫的活,但是工作中确实偶尔有需要网络上的数据的时候,手动复制粘贴的话数据量少还好说,万一数据量大,浪费时间不说,真的很枯燥。
所以现学现卖研究了一个多小时写出了个爬虫程序

一、爬虫所需要的工具包

新建个Maven项目,导入爬虫工具包Jsoup

		<dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

在这里插入图片描述

使用Jsoup解析网页

首先要拿到我们请求的网页的地址
用Jsoup的parse()方法解析网页,传入连个参数第一个参数是new URL(url),第二个参数设置解析时间如果超过30秒就放弃
然后获取到一个Document对象
之后就像我们操作JS代码一样,Document对象可以实现JS的所有操作
在这里插入图片描述
这时候我们用浏览器打开网页,F12审查元素,找到数据所在的div的id名,如果没有id名就用calss名,这里是没有id名的。
在这里插入图片描述
然后我们通过class名获取到元素,这时候可以System.out.println(chinajobs);的输出一下看看日否拿到了我们想要的数据
在这里插入图片描述
可以看到确实拿到了我们想要的数据
在这里插入图片描述

过滤数据

虽然拿到了数据但是有很多多余的信息,所以下一步过滤数据
因为class不是唯一的所以获取的是Elements对象我们要把它转换成Element对象才能进行下一步操作

Element el = chinajobs.first();

将chinajobs中的第一个元素转换成Element对象(首先要确认我们需要的数据在将chinajobs中的第一个元素中)
通过分析发现我们需要的数据可以在title这个属性中提取出来
在这里插入图片描述

String title = el.getElementsByAttribute("title").text();

输出一下试试

System.out.println(el.getElementsByAttribute("title").text());

确实过滤到了所有我们想要的数据
在这里插入图片描述

四、导出Excel

最后一步导出到excel,这里我是用的是poi工具包

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

通过el.getElementsByAttribute(“title”).size()确定元素的数量
采用循环遍历输出
el.getElementsByAttribute(“title”).eq(i)通过eq(i)传入索引值确定元素值
在D盘新建一个上海招聘公司一览表.xls文件

public static void main(String[] args) throws IOException {
        // 获取请求 https://www.buildhr.com/area/shanghai/
        String url = "https://www.buildhr.com/area/shanghai/";
        Document document = Jsoup.parse(new URL(url), 30000);
        Elements chinajobs = document.getElementsByClass("chinajobs");
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("公司名列表");
        Element el = chinajobs.first();
            for (int i = 0; i < el.getElementsByAttribute("title").size(); i++) {
                String title = el.getElementsByAttribute("title").eq(i).text();
                sheet.createRow(i).createCell(0).setCellValue(title);
            }
        try {
            FileOutputStream fout = new FileOutputStream("D:/上海招聘公司一览表.xls");
            wb.write(fout);
            fout.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

大功告成
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值