B站,N站,湯站,爬蟲下載資源總結與技巧(一)

前言

  • 本身主要是IOS,可是也想業餘時間學學後臺的一點,以前用過mfc,c#,寫點嵌入式輔佐小工具,如今入坑脫作IOS.因此,想向全棧走,就業餘時間看看springboot相關,前三篇是不一樣類型的爬蟲表明,今天說說下載對應資源的不一樣處理。本篇只說一些第三方API使用,其餘的下載具體處理會在下期。

webmagic簡介地址(請點擊)html

注意

代碼

嗶哩嗶哩第三方轉換

  • 這個返回是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/c#

相關文章
相關標籤/搜索