sa123456sc 发表于 2022-8-24 12:24

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

本帖最后由 sa123456sc 于 2022-8-27 17:03 编辑

某奇异和某讯的电影,电视剧影视可以定时爬取,主要通过影视ID,通过接口获取影视详情,子集列表。但是某酷的没有找到好的方法,我还是想通过id来抓取影视详情(播放链接、图片链接、影视介绍、上映时间、电视剧子集列表等),不然只能通过jsoup解析网页来获取了。
有没有大神知道某酷怎么通过链接的id_XNTg4NTY5MDExMg==这个id来或许详情的方法,共同讨论一下。
/**
   * 爱奇艺连续剧根据分类爬取子集
   * @Param 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),"影视子集插入数据库失败!");
      }
    }
目前某酷的视频找到了内容,但是因为用了js技术,使用httpclient无法爬取,需要使用htmlunit,但是现在有个难点,htmlunit第一次请求的时候正常,第二次请求的时候就被某酷检测出来是爬虫给拦截了,这点暂时无法攻克。

寒冰流火 发表于 2022-8-26 06:54

通过ID采用Java来爬取强了原来是这样设计的   谢谢楼主分享

扒叔 发表于 2022-8-24 12:32

程序没分享吗?

ookk 发表于 2022-8-24 12:52

只这一段?

iawyxkdn8 发表于 2022-8-24 13:07

我就想看下有没有链接!你不给,我也给不了呀!

jun85719392 发表于 2022-8-24 13:23

学习一下了

jobs_steven 发表于 2022-8-24 13:54

怎么只有片段??

mzxddys 发表于 2022-8-24 14:09

强大66666

psk107520 发表于 2022-8-24 14:10

软件看着很强,发来学习下

XaoTao 发表于 2022-8-24 14:19

优秀,已学习{:1_893:}@XaoTao

意识的 发表于 2022-8-24 14:31

整个视频教学多好
页: [1] 2 3
查看完整版本: 某奇异、某酷、某讯定时爬取,主动爬取