怎么判断百度网盘分享连接已经失效?有那么简单吗?java+python

我不知道现在有多少人在用网盘搜索引擎,但就去转盘网来说本人倾注了很多的心血,现在使用的人数也还可以,网盘资源都有个通病,那就是资源可能失效,但很多引擎都没有做失效判断,尤其是一些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/link?uk=1813251526&shareid=540167442

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

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

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

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

另一种是:http://pan.baidu.com/share/link?uk=1813251526&shareid=540167442,关键是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<String, String[]> rules;
	static {
		loadRule();
	}

	/**
	 * 加载规则库
	 */
	public static void loadRule() {
		try {
			InputStream in = ResourceCheckUtil.class.getClassLoader()
					.getResourceAsStream("rule.properties");
			Properties p = new Properties();
			p.load(in);
			Set<Object> keys = p.keySet();
			Iterator<Object> iterator = keys.iterator();
			String key = null;
			String value = null;
			String[] rule = null;
			rules = new HashMap<String, String[]>();
			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("<h3>")){ //针对微云
			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<WatchEvent<?>> 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("\u8BF7\u8F93\u5165\u63D0\u53D6\u7801".getBytes("utf-8"), "utf-8"));
//	}

}

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

360=class|contain|\u5206\u4EAB\u8005\u5DF2\u53D6\u6D88\u6B64\u5206\u4EAB
baidu=title|contain|\u94FE\u63A5\u4E0D\u5B58\u5728
weiyun=<h3>|contain|\u5206\u4EAB\u8D44\u6E90\u5DF2\u7ECF\u5220\u9664
leshi=title|ed|\u63D0\u53D6\u6587\u4EF6

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

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

时间: 2024-08-02 06:59:53

怎么判断百度网盘分享连接已经失效?有那么简单吗?java+python的相关文章

[PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索(二)

前情提要:最近使用PHP实现了简单的网盘搜索程序,并且关联了微信公众平台,名字是网盘小说.用户可以通过公众号输入关键字,公众号会返回相应的网盘下载地址.就是这么一个简单的功能,类似很多的网盘搜索类网站,我这个采集和搜索程序都是PHP实现的,全文和分词搜索部分使用到了开源软件xunsearch. 上一篇([PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索)中我重点介绍了怎样去获取一大批的百度网盘用户,这一篇介绍怎样获得指定网盘用户的分享列表.同样的原理,也是找到百度获取分享列表的接口,

百度网盘分享创建自定义密码的方法失效了怎么办(2020年)?

· 百度网盘分享创建自定义密码的方法失效了怎么办(2020年)? 百度网盘自定义分享密码的原理方法失效了怎么办(2017年8月失效了)? 今天给大家解释了2020年可以用的版本和原理介绍. 原来的代码失效的原因: 可以将原来脚本里面的function-widget-1:share/util/service/createLinkShare.js  改为function-widget-1:share/util/shareFriend/createLinkShare.js这个脚本失效是由于百度云改变了

自定义百度网盘分享密码 提取码

经过分析代码发现,百度网盘的自定义密码是在本地生成的,本地生成?那么我们就可以修改了. 请按照以下步骤进行操作: 在浏览器中打开百度云盘,选中需要分享的文件,然后点击分享按钮: 点击分享按钮后会弹出一个模态框,先不管它,按 F12 打开开发者工具,切换至控制台(Console),将以下代码复制粘贴到控制台,然后回车: 1 javascript:require(["function-widget-1:share/util/service/createLinkShare.js"]).pro

android源码百度网盘分享

转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46334123 本文出自:[yujun411522的博客] 最近在使用Ubuntu搭建android环境时,下载android源码速度实在太慢.好在已经下完了,为了不浪费大家的时间,所以这里分享一下,已经上传到百度网盘,地址:http://pan.baidu.com/s/1eQ4I4q2

自定义百度网盘分享密码

应用场景 使用百度云盘分享文件时可以创建私密链接,该链接包括一个链接地址和一个提取密码,提取密码一般是随机生成的由数字和字母组成的四位字符串,如 3hq5.3de5 等,而本黑科技便是教你自定义提取密码!!! 使用教程 请按照以下步骤进行操作: 在浏览器中打开百度云盘,选中需要分享的文件,然后点击分享按钮: 点击分享按钮后会弹出一个模态框,先不管它,按 F12 打开开发者工具,切换至控制台(Console),将以下代码复制粘贴到控制台,然后回车: [JavaScript] 纯文本查看 复制代码

JAVA视频资料百度网盘分享

1.javascript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2.JPA视频教程 链接: http://pan.baidu.com/s/1dDCx1fj 密码: fwwd 3.马士兵hibernate视频教程 链接:http://pan.baidu.com/s/1dFILSYH 密码:nuwz 4.JAVA电子书 链接: http://pan.baidu.com/s/1o6xlV9w 密码: 347e 5.ext4.0视频教程 链接:

百度网盘禁止查看别人分享主页的资源收集解决办法

自从百度网盘关闭个人主页的分享功能后,收集别人百度网盘分享的资料就成一件困难的事情. 但是作者发现还有另外一个入口可以收集同行的的网盘资料.这个方法就是订阅同行的百度网盘帐号,订阅后就可以在网盘的分享动态里面看到别人的公开分享的资料,也可以转存到自已的网盘中,但是这个分享动态最多只显示250条. 第一步: 打开对应的分享链接,找到分享资源的人物链接,如图: 第二步: 点击人物头像进入网盘个人主页,点击订阅即可. 第三步: 进入自已的网盘,点击更多,再点击分享动态. 第四步: 在这里就能看到订阅的

百度网盘Mac版如何分享链接?创建百度网盘 for Mac分享链接的方法

想把自己百度网盘里的数据分享给朋友,该怎么操作呢?有很多朋友使用百度网盘,可以很轻松的自己的文件上传到网盘上,并可跨终端随时随地查看和分享.下面Mac down小编就给大家介绍一下创建百度网盘 for Mac分享链接的方法,为使用mac版百度网盘的朋友,解决百度网盘Mac版如何分享链接的烦恼. https://www.macdown.com 百度网盘Mac版如何创建分享链接 我们以分享[18126未来教育考试系统]为例,详细介绍Mac版百度网盘分享链接的方法步骤. 1.我们首先创建百度网盘for

如何利用邓西百度网盘批量转存检测工具批量检测百度网盘失效分享链接

做百度网盘营销的小伙伴有时需要分享一大批网盘分享链接,分享完成发布在网站上或者发送给小伙伴后,但是因为百度对资源的审核,有可能过一段时间其中的一些分享链接就失效了,但是分享链接又太多,自已又没挨个去检查,等待别人反馈才知道那个失效了,非常被动. 下面就介绍如何利用工具怎么样批量检测百度网盘分享失效的链接. 一.邓西百度网盘批量转存检测工具下载:https://pan.baidu.com/s/1S7NgHPFPbNCA6IvOeZSeEQ 二.解压并运行程序,如图: ? ①操作类型选择“检测失效”