点击▲关注 “ 爪哇笔记 ” 给公众号标星置顶
更多精彩 第一时间直达
为了方便使用爪哇工具箱的撸友能够及时的关注到实时热点新闻咨询,撸主决定聚合一下各大网站的热榜信息,统统显示给大家。趁着 夜深人静,赶紧码出键盘,准备开干!
撸主最近学 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 . 十万爆笑动图上线了
2. 周末,撸一个鉴黄 API 给大家
3. 高速下载小视频神器,墙裂推荐
4. 深夜,给小黄图撸了一件漂亮的外壳
5. 小黄图升级了,接入更加强大的鉴黄功能
6. 深夜,吐血训练了百万小黄图撸了一个图床
▲一个有温度的公众号,期待与你一起进步