B站,N站,汤站,爬虫下载资源总结与技巧(一)

前言

  • 自己主要是IOS,但是也想业余时间学学后台的一点,之前用过mfc,c#,写点嵌入式辅佐小工具,现在入坑脱做IOS.所以,想向全栈走,就业余时间看看springboot相关,前三篇是不同类型的爬虫代表,今天说说下载对应资源的不同处理。本篇只说一些第三方API使用,其他的下载具体处理会在下期。

webmagic简介地址(请点击)

注意

代码

哔哩哔哩第三方转换

  • 这个返回是Json格式,格式化相对较好。
/**
 * Created by ray on 2017/6/18.
 * 获取 BILIBILI 视频真实地址
 */
@Service
public class FlvUrlService {

    @Value("${flvurl.appId}")
    String appIdKey;

    @Autowired
    RestTemplate restTemplate;

    private String baseUrl = "http://api.v2.flvurl.cn/parse/";

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    public JSONObject parse (String url){
        String reqUrl = baseUrl + "?appid=" + appIdKey + "&type=vod&url=" + url;
        String string = restTemplate.getForObject(reqUrl , String.class);
        JSONObject jsonObject = JSON.parseObject(string,JSONObject.class);
        return jsonObject;
    }

    public FlvUrlRecModel parseToObject (String url){
        String reqUrl = baseUrl + "?appid=" + appIdKey + "&type=vod&url=" + url;
        String string = "";
        FlvUrlRecModel jsonObject = null;
        try {
            string = restTemplate.getForObject(reqUrl , String.class);
            jsonObject = JSON.parseObject(string,FlvUrlRecModel.class);
            return jsonObject;
        }
        catch (Exception e){
            logger.error(reqUrl);
            return null;
        }

    }

NicoNico第三方转换

  • 这个返回是XML格式,要注意各种处理,还有容错。
/**
 * Created by ray on 2017/7/23.
 * 获取NICONICO 视频真实地址
 */

@Service
public class NicoVideoUrlService {

    @Autowired
    RestTemplate restTemplate;

    //post
    private String baseUrl = "http://www.movies-downloader.com/a.cgi";

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    public NicoVideoRecModel parse (String url){

        //url = "http://www.nicovideo.jp/watch/sm31610292";

        NicoVideoRecModel recModel = null;
        String reqUrl = baseUrl;

        try {
            //head
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
            //body
            MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
            map.add("url", url);
            //请求封装
            HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
            String body = restTemplate.postForEntity(reqUrl,request,String.class).getBody();
            //logger.info("req map:" + map.toString()  + " body:" + body);



            Html html = new Html(body);
            String aid = url.substring(url.lastIndexOf("/") + 1,url.length());
            String title = html.xpath("//b/text()").toString();
            String imgsrc = html.xpath("//img/@src").toString();
            String href = html.xpath("//a/@href").toString().split("=")[1];
            String videoUrl = "";

            videoUrl = URLDecoder.decode(href,"UTF-8");

            recModel = new NicoVideoRecModel();
            recModel.setAid(aid);
            recModel.setTitle(title);
            recModel.setImgsrc(imgsrc);
            recModel.setVideoUrl(videoUrl);

            logger.info("Nico Api:" + map.toString()  + " body:" + JSON.toJSONString(recModel));
        }
        catch (Exception e){
            logger.error(reqUrl);

        }
        return recModel;
    }

}

原文:http://raychow.linkfun.top/2017/12/22/archives/9_javaSpring/spriderDown/index/

猜你喜欢

转载自my.oschina.net/u/3729367/blog/1593884
今日推荐