IE盒子

搜索
查看: 105|回复: 4

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

[复制链接]

2

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-12-3 19:20:29 | 显示全部楼层 |阅读模式
一、前言

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

撸主最近学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写爬虫了,还是本命语言来的比较顺手!!!


<hr/>
原作者:小柒2012
原文链接:Java也能写爬虫?真香!!!
原出处:公众号

回复

使用道具 举报

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-3 19:20:46 | 显示全部楼层
感谢楼主分享,推荐另一个也不错的爬虫工具,java版的,基于webdriver,地址:https://study.163.com/course/introduction/1209701818.htm?share=2&shareId=480000002171574
回复

使用道具 举报

2

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-12-3 19:21:38 | 显示全部楼层
厉害厉害,我们这种小白,只能用用爬虫软件爬取了,用过八爪鱼感觉挺好用的,跟我一样的小白可以试试,大神就....大神想咋样就咋样[笑哭]只有膜拜
回复

使用道具 举报

3

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-3 19:21:57 | 显示全部楼层
这里还有另外一个一个也不错,jvppeteer,完全真实的浏览器爬虫
回复

使用道具 举报

3

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2022-12-3 19:22:22 | 显示全部楼层
正在学python爬虫,突然想到java会不会也可以爬,结果还真有!本来以为和python差不多,应该能看懂,没想到好像差挺多的。想问问楼主python的requests、json、bs4等模块在java里面有没有相应的(外部)包啥的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表