爬虫案例~

爬虫上机小测试

需要爬取的网址:

http://www.xinhuanet.com/legal/ej.htm?page=fzzt
在这里插入图片描述

思路分析:

要找出元素的text 可以选择css选择器 或者getElementById 可以根据jsoup获取的document对象获取值 但是后来实现的时候发现jsoup获取的html跟源码不一致 那么可能的原因就是网页加载的时候又通过ajax发送请求 才获得数据渲染上来的 那么可以考虑通过WebClient模拟发送请求 但是后来又发现解决不了请求分页的数据(估计是可以模拟点击"查询更多"按钮 但是目前技术有限)
在这里插入图片描述

接着抓取请求内容
在这里插入图片描述

通过查看发送的请求发现 我们要爬取的 时间 字段是异步请求的 如果直接解析网页 是请求不到这一部分数据的 那么我们可以通过jsoup模拟发送一个请求 再处理response就可以了在这里插入图片描述

实现思路:

1.发送请求(要发什么请求,怎么发,发什么):
通过jsoup发送get请求 在将页码通过拼接的方式 循环发送 每次循环 让页码加一即可
2.处理响应的数据(响应的数据有什么)
response数据格式我估摸着就是json格式了 可以先尝试看一下返回的数据
在这里插入图片描述

返回的就是json数据 解析看一下
在这里插入图片描述

3.截取想要的值 通过JSONObject将我们的json数据转换成key:value形式的JSONArray对象 通过Title和PubTime字段获取值就是我们想要的了
4.数据的表示形式 可以存到txt里面 但是通过ObjectWrite可以将对象序列化到文件中 但是会有乱码问题 只有再次读取的时候才不会乱码(这是正常现象 为了数据清晰可读 那就放在数据库里吧 也是有点懒)
实现步骤
Maven依赖坐标

<dependencies>

        <!-- 导入Jsoup依赖 -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
        <!-- 酸辣粉的日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <!--            <scope>test</scope>-->
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
    </dependencies>

然后编写我们的代码 为了方便 我就懒得搞业务分离了
先搞个News对象 我们吧获取到的数据封装到对象里吧
在这里插入图片描述
就两个字段 实现序列化接口是我想测试序列化到文件中时候加的 可选
然后发请求
在这里插入图片描述

这里为了防止后人乘凉 那我就不全部复制了
然后我们查看数据库
在这里插入图片描述

89行 是因为我测试了两次 所以实际好像没有那么多
使用指南:
因为时间不是很多 也是第一次做了爬取动态数据的爬虫 所以有几个地方需要注意 如果想要使用我的代码
数据库方面:
在这里插入图片描述

== 这数据库还有账号密码三个字段 自行修改==
然后我的建表sql会放在resource中 要测试的可以直接导入就好

猜你喜欢

转载自blog.csdn.net/Fhakjfksakln/article/details/120911866