资讯专栏INFORMATION COLUMN

java判断百度云分享链接是否失效

kid143 / 375人阅读

我不知道现在有多少人在用网盘搜索引擎,但就去转盘网来说本人倾注了很多的心血,现在使用的人数也还可以,网盘资源都有个通病,那就是资源可能失效,但很多引擎都没有做失效判断,尤其是一些google自定义的引擎,技术含量不高,站长也就花心思赚钱,很少考虑用户体验。这篇文章是本人又一篇技术公开博客,之前本人已经公开了去转盘

网的几乎所有的技术细节,这一篇继续补充:

首先做个回顾:百度网盘爬虫 java分词算法 数据库自动备份 代理服务器爬取 邀请好友注册

ing:utf-8
"""
@author:haoning
@create time:2015.8.5
"""
from __future__ import division  # 精确除法
from Queue import Queue
from __builtin__ import False
from _sqlite3 import SQLITE_ALTER_TABLE
from collections import OrderedDict
import copy
import datetime
import json
import math
import os
import random
import platform
import re
import threading, errno, datetime
import time
import urllib2
import MySQLdb as mdb


DB_HOST = "127.0.0.1"
DB_USER = "root"
DB_PASS = "root"


def gethtml(url):
    try:
        print "url",url
        req = urllib2.Request(url)
        response = urllib2.urlopen(req,None,8) #在这里应该加入代理
        html = response.read()
        return html
    except Exception,e:
        print "e",e

if __name__ == "__main__":

   while 1:
       #url="http://pan.baidu.com/share/link?uk=1813251526&shareid=540167442"
       url="http://pan.baidu.com/s/1qXQD2Pm"
       html=gethtml(url)
       print html

结果:e HTTP Error 403: Forbidden,这就是说,度娘他是反爬虫的,之后看了很多网站,一不小心试了下面的链接:

http://pan.baidu.com/share/li...

if __name__ == "__main__":

   while 1:
       url="http://pan.baidu.com/share/link?uk=1813251526&shareid=540167442"
       #url="http://pan.baidu.com/s/1qXQD2Pm"
       html=gethtml(url)
       print html

结果:百度云 网盘-链接不存在,你懂的,有这个的必然已经失效,看来度娘没有反爬虫,好家伙。

其实百度网盘的资源入口有两种方式:

一种是:http://pan.baidu.com/s/1qXQD2Pm,最后为短码。

另一种是:http://pan.baidu.com/share/li...,关键是shareId+uk 前者已知道反爬虫,后者目前没有,所以用python测试后,本人又将代码翻译成了java,因为去转盘是用java写的,直接上代码:

package com.tray.common.utils;

import static org.junit.Assert.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import java.util.Set;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test;

/**
 * 资源校验工具
 * 
 * @author hui
 * 
 */
public class ResourceCheckUtil {
    private static Map rules;
    static {
        loadRule();
    }

    /**
     * 加载规则库
     */
    public static void loadRule() {
        try {
            InputStream in = ResourceCheckUtil.class.getClassLoader()
                    .getResourceAsStream("rule.properties");
            Properties p = new Properties();
            p.load(in);
            Set keys = p.keySet();
            Iterator iterator = keys.iterator();
            String key = null;
            String value = null;
            String[] rule = null;
            rules = new HashMap();
            while (iterator.hasNext()) {
                key = (String) iterator.next();
                value = (String) p.get(key);
                rule = value.split("|");
                rules.put(key, rule);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String httpRequest(String url) {
        try {
            URL u = new URL(url);
            Random random = new Random();
            HttpURLConnection connection = (HttpURLConnection) u
                    .openConnection();
            connection.setConnectTimeout(3000);//3秒超时
            connection.setReadTimeout(3000); 
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setRequestMethod("GET");
            
            String[] user_agents = {
                    "Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11",
                    "Opera/9.25 (Windows NT 5.1; U; en)",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
                    "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)",
                    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12",
                    "Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9",
                    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",
                    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "
            };
            int index=random.nextInt(7);
            /*connection.setRequestProperty("Content-Type",
                    "text/html;charset=UTF-8");*/
            connection.setRequestProperty("User-Agent",user_agents[index]);
            /*connection.setRequestProperty("Accept-Encoding","gzip, deflate, sdch");
            connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.8");
            connection.setRequestProperty("Connection","keep-alive");
            connection.setRequestProperty("Host","pan.baidu.com");
            connection.setRequestProperty("Cookie","");
            connection.setRequestProperty("Upgrade-Insecure-Requests","1");*/
            InputStream in = connection.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(in,
                    "utf-8"));
            StringBuffer sb = new StringBuffer();
            String line = null;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            return sb.toString();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

     @Test
     public void test7() throws Exception {
         System.out.println(isExistResource("http://pan.baidu.com/s/1jGjBmyq",
         "baidu"));
         System.out.println(isExistResource("http://pan.baidu.com/s/1jGjBmyqa",
         "baidu"));
        
         System.out.println(isExistResource("http://yunpan.cn/cQx6e6xv38jTd","360"));
         System.out.println(isExistResource("http://yunpan.cn/cQx6e6xv38jTdd",
         "360"));
        
         System.out.println(isExistResource("http://share.weiyun.com/ec4f41f0da292adb89a745200b8e8b57","weiyun"));
         System.out.println(isExistResource("http://share.weiyun.com/ec4f41f0da292adb89a745200b8e8b57dd",
         "360"));
        
         System.out.println(isExistResource("http://cloud.letv.com/s/eiGLzuSes","leshi"));
         System.out.println(isExistResource("http://cloud.letv.com/s/eiGLzuSesdd",
         "leshi"));
     }

    /**
     * 获取指定页面上标签的内容
     * 
     * @param url
     * @param tagName
     *            标签名称
     * @return
     */
    private static String getHtmlContent(String url, String tagName) {
        String html = httpRequest(url);
        if(html==null){
            return "";
        }
        Document doc = Jsoup.parse(html);
        //System.out.println("doc======"+doc);
        Elements tag=null;
        if(tagName.equals("

")){ //针对微云 tag=doc.select("h3"); } else if(tagName.equals("class")){ //针对360 tag=doc.select("div[class=tip]"); } else{ tag= doc.getElementsByTag(tagName); } //System.out.println("tag======"+tag); String content=""; if(tag!=null&&!tag.isEmpty()){ content = tag.get(0).text(); } return content; } public static int isExistResource(String url, String ruleName) { try { String[] rule = rules.get(ruleName); String tagName = rule[0]; String opt = rule[1]; String flag = rule[2]; /*System.out.println("ruleName"+ruleName); System.out.println("tagName"+tagName); System.out.println("opt"+opt); System.out.println("flag"+flag); System.out.println("url"+url);*/ String content = getHtmlContent(url, tagName); //System.out.println("content="+content); if(ruleName.equals("baidu")){ if(content.contains("百度云升级")){ //升级作为不存在处理 return 1; } } String regex = null; if ("eq".equals(opt)) { regex = "^" + flag + "$"; } else if ("bg".equals(opt)) { regex = "^" + flag + ".*$"; } else if ("ed".equals(opt)) { regex = "^.*" + flag + "$"; } else if ("like".equals(opt)) { regex = "^.*" + flag + ".*$"; }else if("contain".equals(opt)){ if(content.contains(flag)){ return 0; } else{ return 1; } } if(content.matches(regex)){ return 1; } } catch (Exception e) { e.printStackTrace(); } return 0; } // public static void main(String[] args)throws Exception { // final Path p = Paths.get("C:/Users/hui/Desktop/6-14/"); // final WatchService watchService = // FileSystems.getDefault().newWatchService(); // p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY); // new Thread(new Runnable() { // // public void run() { // while(true){ // System.out.println("检测中。。。。"); // try { // WatchKey watchKey = watchService.take(); // List> watchEvents = watchKey.pollEvents(); // // for(WatchEvent event : watchEvents){ // //TODO 根据事件类型采取不同的操作。。。。。。。 // System.out.println("["+p.getFileName()+"/"+event.context()+"]文件发生了["+event.kind()+"]事件"); // } // watchKey.reset(); // // } catch (Exception e) { // e.printStackTrace(); // } // } // } // }).start(); // } // @Test // public void testName() throws Exception { // System.out.println(new String("u8BF7u8F93u5165u63D0u53D6u7801".getBytes("utf-8"), "utf-8")); // } }

注意代码本生要用来兼容360,微盘等网盘的,但有些网盘倒了,大家都知道,不过代码还是得在,这才是程序猿该有的思路,那就是可宽展,注意代码有个配置文件,我也附上吧:

360=class|contain|u5206u4EABu8005u5DF2u53D6u6D88u6B64u5206u4EAB
baidu=title|contain|u94FEu63A5u4E0Du5B58u5728
weiyun=

|contain|u5206u4EABu8D44u6E90u5DF2u7ECFu5220u9664
leshi=title|ed|u63D0u53D6u6587u4EF6

sorry,unicode编码,麻烦你自己转下码吧,不会请百度:unicode转码工具

到此,去转盘网链接是否失效的验证,代码我已经完全公开,喜欢这篇博客的孩子请收藏并关注下。

本人建个qq群,欢迎大家一起交流技术, 群号:512245829 喜欢微博的朋友关注:转盘娱乐即可

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38134.html

相关文章

  • java判断百度分享链接是否失效

    我不知道现在有多少人在用网盘搜索引擎,但就去转盘网来说本人倾注了很多的心血,现在使用的人数也还可以,网盘资源都有个通病,那就是资源可能失效,但很多引擎都没有做失效判断,尤其是一些google自定义的引擎,技术含量不高,站长也就花心思赚钱,很少考虑用户体验。这篇文章是本人又一篇技术公开博客,之前本人已经公开了去转盘 网的几乎所有的技术细节,这一篇继续补充: 首先做个回顾:百度网盘爬虫 java分词...

    chanthuang 评论0 收藏0
  • 指尖一点歌声来--微信小程序之仿网易音乐心得

    摘要:为了提高自己,最近在学习微信小程序,选题是仿网易云音乐。查文档发现,小程序中图片加载完成后,有一个加载完成事件。前者在微信客户端版本就不开始维护了,后者低版本需做兼容处理。目前还有一些功能暂未实现,会在以后继续完善项目,继续学习。 为了提高自己,最近在学习微信小程序,选题是仿网易云音乐。期间踩过了大把的坑,bug出现的难受和解决bug欢喜,一直是伴随我阶段性学习这个项目的心情。初步完成...

    KitorinZero 评论0 收藏0
  • 做IT这几年,我整理了这些干货想要送给你!

    摘要:资源获取方式根据下面的索引,大家可以选择自己需要的资源,然后在松哥公众号牧码小子后台回复对应的口令,就可以获取到资源的百度云盘下载地址。公众号二维码如下另外本文会定期更新,松哥有新资源的时候会及时分享给大家,欢迎各位小伙伴保持关注。 没有一条路是容易的,特别是转行计算机这条路。 松哥接触过很多转行做开发的小伙伴,我了解到很多转行人的不容易,记得松哥大二时刚刚决定转行计算机,完全不知道这...

    王晗 评论0 收藏0
  • 阿里学生服务器操作攻略(超详细全套完整图文教程!菜鸟必看!)

    摘要:第一步如何以最低价格快速买到阿里云服务器如果我是学生,我如何通过买到价值的服务答用购买云服务器是阿里云学生专属活动。除阿里云外,大多数云服务器公司例如西部等同配置云服务器的价格都在左右。例如云服务器地址等。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务?答:用¥9.9购买云服务器ECS是阿里云学生专属活动。首先,你需要在阿里云官网注...

    FuisonDesign 评论0 收藏0
  • 阿里ECS建网站(建站)超详细全套完整图文教程! [

    摘要:首先,你需要在阿里云官网注册账号。然后在阿里云官网首页点击校园扶持,经学生认证后便可购买每月的特价云服务器。图幕布拍照如果对备案还有疑问,请参考阿里云官方文档首次备案图文引导。具体操作方式请看阿里云官方介绍镜像部署或一键安装包部署。第一步:如何以最低价格快速买到阿里云服务器?1.1 如果我是学生,我如何通过¥9.9买到价值¥117的服务? 答:用¥9.9购买云服务器ECS是阿里云学生专属活动...

    andycall 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<