点击▲关注 “爪哇笔记” 给公众号标星置顶
更多精彩 第一时间直达
一、前言
为了方便使用爪哇工具箱的撸友能够及时的关注到实时热点新闻咨询,撸主决定聚合一下各大网站的热榜信息,统统显示给大家。趁着夜深人静,赶紧码出键盘,准备开干!
二、开撸
撸主最近学Python
学烦了,决定使用本命语言Java
爬一下各大网站的热点信息。
这里以博客园为例,也是撸主日常必须关注的技术类博客,爬取其48小时阅读排行。
推荐小伙伴们使用开源第三方爬取工具,pom.xml
引入:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
代码案例:
由于48小时阅读排行是异步加载的,我们需要通过F12
分析请求获取请求地址,剩下的就是解析其DOM
结构了。
@Override
@Transactional
public void cnblogs() {
try{
String Url = "https://www.cnblogs.com/aggsite/SideRight";
Document document = Jsoup.connect(Url)
.timeout(10000)
.ignoreContentType(true)
.userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36")
.get();
Elements element = document.select(".w_r").eq(1).select("li");
Timestamp time = DateUtils.getTimestamp();
String nativeSql = "DELETE FROM app_collect WHERE type=? ";
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{CollectConstant.CNBLOGS.getType()});
element.forEach(em->{
Collect collect = new Collect();
String href = em.select("a").attr("href");
String title = em.select("a").text().replace("search","");
collect.setTitle(title);
collect.setOriginalUrl(href);
collect.setType(CollectConstant.CNBLOGS.getType());
collect.setStatus(SystemConstant.DELETE_STATUS_NO);
collect.setGmtCreate(time);
dynamicQuery.save(collect);
});
}catch (IOException e){
e.printStackTrace();
}
}
表结构:
/**
* 内容聚合
*/
@Data
@Entity
@Table(name = "app_collect")
public class Collect implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name="title")
private String title;
@Column(name="url")
private String url;
@Column(name="original_url")
private String originalUrl;
@Column(name="type")
private Integer type;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@Column(name="gmt_create")
private Timestamp gmtCreate;
}
最后写个定时任务,每隔三十分钟爬取一次:
@Component
public class CrawlerTask {
@Autowired
private CrawlerService crawlerService;
private static final Logger logger = LoggerFactory.getLogger(Application.class);
@Scheduled(cron = "0 */30 * * * ?")
public void create() {
logger.info("爬取任务开始");
crawlerService.cnblogs();
crawlerService.ithome();
crawlerService.baidu();
logger.info("爬取任务结束");
}
}
三、效果
很显然,效果有点小丑,不过撸主会继续优化的!!
四、小结
以后撸主决定再也不用Python
写爬虫了,还是本命语言来的比较顺手!!!
1. 十万爆笑动图上线了
▲一个有温度的公众号,期待与你一起进步