我们上一讲已经将项目的大体搭建起来了,接下来我们来分析一下我们将要爬取的第一个网站:博客园 - 开发者的网上家园
一、分析页面(!!!样子变了很多,最起码我当时写测试代码的时候样子不是这个样子,而且我写测试代码到我写博客就间隔了几天而已,哈呀一)
我们爬虫主要爬的是中间的着一块区域,要爬取的内容有:博客标题、简介、博客创建时间、用户头像、用户名称这些内容。
每次打开页面可以展示 20 条博客记录,最多可以展示 200 页,这也就是说,我们最多可以爬 4000 条数据,后面根据增量往我们数据库更新即可。
然后就是怎么爬这些数据,还有翻页的问题了。
怎么爬数据我们后面写代码的时候会将,所以我们只需要考虑翻页的问题;我通过点击页面的翻页,然后观察他的 network 接口发现,每次翻页的时候都会有一个 Restful 的请求。
好比 /xxx/1 就是第一页,/xxx/2 就是第二页,所以我直接放弃通过 htmlunit 去模拟点击按钮进行翻页,而是直接通过这个 restful 接口进行实现翻页的效果。
(这个接口现在隐匿了,找不到了,但是好在我有,我不会将这个接口直接公布出来,有需要的朋友可以去拉取我的项目,可以在 yml 配置文件中找到)
二、数据库建表这里我们创建两个表,一个是博客表,还有一个是用户表。然后博客表中有一个用户表的主键作为关联键,详细设计如下~
CREATE TABLE `t_lemon1234_scraper_author` ( `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', `authorCode` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者编号', `authorName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者名称', `authorUrl` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者主页连接', `imageUrl` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像', `lastOperateDt` datetime DEFAULT NULL COMMENT '最后操作日期', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `t_lemon1234_scraper_blog` ( `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', `blogCode` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '博客编号', `blogTitle` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '博客名称', `blogUrl` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '博客连接', `blogCreateDt` datetime DEFAULT NULL COMMENT '博客创建日期', `content` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '博客简介', `authorId` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者id', `lastOperateDt` datetime DEFAULT NULL COMMENT '最后操作日期', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
比较简单,相信大家能看懂的哈。
三、Java Entity下面代码只有实体,自己去弄一下 get set 方法,如果你用了 Lombok,自己去加一下注解什么的~
public class Author implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String authorCode;
private String authorName;
private String authorUrl;
private String imageUrl;
private Date lastOperateDt;
}
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String blogCode;
private String blogTitle;
private String blogUrl;
private Date blogCreateDt;
private String content;
private String authorId;
private Date lastOperateDt;
}
这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com



