爬虫上机小测试
需要爬取的网址:
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中 要测试的可以直接导入就好