吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3334|回复: 22
收起左侧

[Java 转载] 某奇异、某酷、某讯定时爬取,主动爬取

  [复制链接]
sa123456sc 发表于 2022-8-24 12:24
本帖最后由 sa123456sc 于 2022-8-27 17:03 编辑

某奇异和某讯的电影,电视剧影视可以定时爬取,主要通过影视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),"影视子集插入数据库失败!");
        }
    }

目前某酷的视频找到了内容,但是因为用了js技术,使用httpclient无法爬取,需要使用htmlunit,但是现在有个难点,htmlunit第一次请求的时候正常,第二次请求的时候就被某酷检测出来是爬虫给拦截了,这点暂时无法攻克。
QQ截图20220824121746.png
QQ截图20220824121651.png
QQ截图20220824114707.png
QQ截图20220824121746.png
QQ截图20220824121651.png
QQ截图20220824114707.png

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
zk847204095 + 1 + 1 谢谢@Thanks!
13507520538 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

寒冰流火 发表于 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
优秀,已学习@XaoTao
意识的 发表于 2022-8-24 14:31
整个视频教学多好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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