找回密码
  注册[Register]
查看: 511|回复: 13

[java] 某奇异、某酷、某讯定时爬取,主动爬取

[复制链接]
发表于 2022-8-24 13:36 来自手机 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

本帖最后由 GOODGOOD 于 2022-8-24 13:38 编辑

某奇异和某讯的电影,电视剧影视可以定时爬取,主要通过影视ID,通过接口获取影视详情,子集列表。但是某酷的没有找到好的方法,我还是想通过id来抓取影视详情(播放链接、图片链接、影视介绍、上映时间、电视剧子集列表等),不然只能通过jsoup解析网页来获取了。
有没有大神知道某酷怎么通过链接的id_XNTg4NTY5MDExMg==这个id来或许详情的方法,共同讨论一下。
[Java] 纯文本查看 复制代码
/**
    * 爱奇艺连续剧根据分类爬取子集
    * [url=home.php?mod=space&uid=952169]@Param[/url] movie
    */
   private void aqySetEpisodeByMovie(Movie movie) {
       int page = 1;
       while(page <= movie.getEpisodeLatestNo()/200+1){
           String url="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+movie.getAlbumId()+"&page="+page+"&size=200";
           String html = HttpUtils.getHtml(url);
           JSONObject htmlJson = (JSONObject) JSONObject.parse(html);
           JSONObject tvInfoJson = (JSONObject) JSONObject.parse(htmlJson.get("data").toString());
           JSONArray epsodelistJsonArray = (JSONArray) tvInfoJson.get("epsodelist");
           for(int i = 0;i < epsodelistJsonArray.size(); i++){
               JSONObject epsodeJSONObject = JSONObject.parseObject(epsodelistJsonArray.get(i).toString());
               AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("tvId")),"未解析到电视剧当前集的tvId!");
               //根据tvId和movieId查找数量,如果大于0,表示已经存在,就跳过,否则添加。
               int movieEpisodeCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getTvId, epsodeJSONObject.get("tvId").toString())
                       .eq(MovieEpisode::getMovieId, movie.getId()));
               if(movieEpisodeCount == 0){//不存在该记录,添加记录
                   MovieEpisode movieEpisode = new MovieEpisode();
                   movieEpisode.setAlbumId(movie.getAlbumId());//设置AlbumId
                   movieEpisode.setMovieId(movie.getId());//设置movieId
                   movieEpisode.setTvId(epsodeJSONObject.get("tvId").toString());//设置tvId
                   AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("playUrl")),"未解析到电视剧当前集的播放地址!");
                   movieEpisode.setEpisodeUrl(epsodeJSONObject.get("playUrl").toString());//设置播放地址
                   AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("order")),"未解析到电视剧当前集的order!");
                   movieEpisode.setEpisodeNo(Integer.parseInt(epsodeJSONObject.get("order").toString()));//设置当前集
                   if(movieEpisode.getEpisodeNo()==1 ){//是第一集,更新movie的页面
                       movie.setMovieUrl(movieEpisode.getEpisodeUrl());
                       AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
                   }
                   if(ObjectUtils.isNotEmpty(epsodeJSONObject.get("subtitle"))){
                       movieEpisode.setRemark(epsodeJSONObject.get("subtitle").toString());//设置当前集数的小标题
                   }
                   if(ObjectUtils.isNotEmpty(epsodeJSONObject.get("period"))){
                       movieEpisode.setUpdateTime(DateUtil.formatString(epsodeJSONObject.get("period").toString(),"yyyy-MM-dd"));//设置更新时间
                   }
                   movieEpisode.setStatusCode(0);//设置正常
                   AssertUtil.isTrue(!movieEpisodeService.save(movieEpisode),"影视子集插入数据库失败!");
                   if(movie.getEpisodeCount() != 0){//判断当前子集数量是否等于movie.getEpisodeCount()的数量,相等表示完结
                       int nowCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getMovieId, movie.getId()));
                       if(nowCount == movie.getEpisodeCount()){
                           movie.setIsOver(0);//完结
                           AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
                       }
                   }
               }
           }
           page++;
       }
       int nowCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getMovieId, movie.getId()));
       if(movie.getEpisodeLatestNo() != nowCount){
           movie.setEpisodeLatestNo(nowCount);
           AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
       }
   }

121928im39qkkm8c3xc4k4.png
121946n2vgl7tj89g8hj32.png
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-8-24 13:36 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 13:36 | 显示全部楼层

支持楼主,谢谢分享。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 13:38 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 13:46 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 15:50 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 16:10 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 16:11 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 16:13 | 显示全部楼层
先收藏了,万一用到呢
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-24 16:24 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-9 04:41 , Processed in 0.037040 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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