Java也能写爬虫?真香!!!

点击▲关注 “爪哇笔记”   给公众号标星置顶

更多精彩 第一时间直达

一、前言

为了方便使用爪哇工具箱的撸友能够及时的关注到实时热点新闻咨询,撸主决定聚合一下各大网站的热榜信息,统统显示给大家。趁着夜深人静,赶紧码出键盘,准备开干!

二、开撸

撸主最近学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. 深夜,吐血训练了百万小黄图撸了一个图床


▲一个有温度的公众号,期待与你一起进步

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值