利用jsoup爬取百度网盘资源分享连接(多线程)
突然有一天就想说能不能用某种方法把百度网盘上分享的资源连接抓取下来,于是就动手了。知乎上有人说过最好的方法就是http://pan.baidu.com/wap抓取,一看果然链接后面的uk值是一串数字,就想到能够自己拼装链接,循环不断的去抽取页面。于是自己分析了下页面结构,就開始了
从一開始写的时候,发现一秒钟就抽取了一个页面,想到之前用的webmagic爬虫里抓取页面就用了java的多线程技术,于是百度。。。直接上代码。(抓取过程中发现好多无效资源,垃圾资源,广告资源特别多,所以慢慢的累积了非常多垃圾keyword,在抓取过程中过滤)
package getBaiduYunURL; import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; class mythread implements Runnable{
long count;
public void run() {
try{
for(;this.count<1813454114;this.count++){
PrintWriter printWriter = new PrintWriter(new FileWriter(new File("D:/自学/BaiduYunData/Data/url.txt"), true));
PrintWriter cachePrintWriter = new PrintWriter(new FileWriter(new File("D:/自学/BaiduYunData/Cache/index.txt"), false));
cachePrintWriter.println(this.count);
cachePrintWriter.close();
String url="http://pan.baidu.com/wap/share/home?uk="+this.count;
Document doc = Jsoup.connect(url).timeout(60000).get();
String title = doc.title();
System.out.println(title+this.count);
Element content = doc.body();
Elements emptytag=content.select(".empty-other"); //看是否有分享 为空则是有分享
if(emptytag.isEmpty()){
System.out.println("有分享");
Elements dataems=content.select("[data-ac=active]");
for(Element dataem:dataems){
Elements lists=dataem.select(".list-item");
String sourcename=dataem.attr("data-fn");
if(sourcename!=""){
if(!sourcename.matches("^\\w+.[^sS]+$|^\\w+[-]\\w+.[^sS]+$|^\\w+[.?!;]\\w+.[^Ss]+$|\\w+|^.*[!??!].*$")){
System.out.println("不是数字");
if(sourcename.indexOf("医院")==-1&&sourcename.indexOf("淘宝")==-1
&&sourcename.indexOf("彩票")==-1&&sourcename.indexOf("福彩")==-1&&sourcename.indexOf("牌")==-1
&&sourcename.indexOf("双色球")==-1&&sourcename.indexOf("创业")==-1&&sourcename.indexOf("咨询")==-1
&&sourcename.indexOf("赚")==-1&&sourcename.indexOf("网店")==-1
&&sourcename.indexOf("营销")==-1&&sourcename.indexOf("娱乐")==-1
&&sourcename.indexOf("cf刷枪")==-1&&sourcename.indexOf("哪里")==-1
&&sourcename.indexOf("麻将")==-1&&sourcename.indexOf("作弊")==-1
&&sourcename.indexOf("早泄")==-1&&sourcename.indexOf("人流")==-1
&&sourcename.indexOf("包皮")==-1&&sourcename.indexOf("痔")==-1
&&sourcename.indexOf("肾")==-1&&sourcename.indexOf("治疗")==-1&&sourcename.indexOf("病")==-1
&&sourcename.indexOf("哪家")==-1&&sourcename.indexOf("哪个")==-1
&&sourcename.indexOf("妇科")==-1&&sourcename.indexOf("男科")==-1
&&sourcename.indexOf("复件")==-1&&sourcename.indexOf("痘")==-1
&&sourcename.indexOf("免费")==-1&&sourcename.indexOf("qq")==-1
&&sourcename.indexOf("QQ")==-1&&sourcename.indexOf("减肥")==-1
&&sourcename.indexOf("高考志愿")==-1&&sourcename.indexOf("瘦身")==-1
&&sourcename.indexOf("新建")==-1&&sourcename.indexOf("挂")==-1
&&sourcename.indexOf("解压")==-1&&sourcename.indexOf("肝")==-1&&sourcename.indexOf("炎")==-1
&&sourcename.indexOf("补丁")==-1&&sourcename.indexOf("疤痕")==-1&&sourcename.indexOf(".exe")==-1
&&sourcename.indexOf("刷")==-1&&sourcename.indexOf(".com")==-1&&sourcename.indexOf("美女")==-1){
System.out.println(sourcename);
printWriter.println(sourcename);
for(Element listem:lists){
String linkHref = url+listem.attr("href");
printWriter.println(linkHref);
System.out.println(linkHref);
}
}else{
System.out.println(sourcename);
}
}else{
System.out.println("是数字");
}
}
}
}
printWriter.close();
cachePrintWriter.close();
}
}catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class MultiThread {
public static void main(String args[]) { mythread my = new mythread();
try{
FileReader text = new FileReader("D:/自学/BaiduYunData/Cache/index.txt");
BufferedReader buff = new BufferedReader(text);
String index=buff.readLine();
my.count=Long.parseLong(index);
}catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<100;i++){
new Thread(my).start();
}
}
}
代码如上,非常easy,我是把抓取的链接放在txt中,下一步就是把这些资源做成能够在线搜索,和非常多网盘搜索一样,可是我这个比較低级。
利用jsoup爬取百度网盘资源分享连接(多线程)的更多相关文章
- 爬取百度网盘资源报user is not authorized, hitcode:119
爬取百度网盘资源报user is not authorized, hitcode:119 一.总结 一句话总结: 可能是百度网盘禁止非客户端环境下载大文件,所以将请求头改为客户端:'User-Agen ...
- [PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索
标题起的太大了,都是骗人的.最近使用PHP实现了简单的网盘搜索程序,并且关联了微信公众平台.用户可以通过公众号输入关键字,公众号会返回相应的网盘下载地址.就是这么一个简单的功能,类似很多的网盘搜索类网 ...
- 利用Python爬虫实现百度网盘自动化添加资源
事情的起因是这样的,由于我想找几部经典电影欣赏欣赏,于是便向某老司机寻求资源(我备注了需要正规视频,绝对不是他想的那种资源),然后他丢给了我一个视频资源网站,说是比较有名的视频资源网站.我信以为真,便 ...
- 打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源
前一段时间国内的各大网盘百度云盘,金山快盘,360云盘,华为网盘为争夺用户上演空间容量博弈,网盘商们还固执地以为中国的网民都不懂网络技术,可以像某公司那样用一些数字的手段来忽悠用户,参与到网盘商的数字 ...
- Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源,BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 各种后台管理系统
Java,面试题,简历,Linux,大数据,常用开发工具类,API文档,电子书,各种思维导图资源,百度网盘资源BBS论坛系统 ERP管理系统 OA办公自动化管理系统 车辆管理系统 家庭理财系统 各种后 ...
- 利用xpath爬取招聘网的招聘信息
爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...
- python 利用selenium爬取百度文库的word文章
今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.k ...
- 200G网盘资源分享
今日偶得大量网盘资源,遂写一博文以分享! 来源:HACK学习呀,微信公众号:HACK学习呀 文件名 链接 提取密码 2015cracer入侵入门到精通视频教程 点我查看 trf3 一笔√带过入侵教程 ...
- 网盘资源分享:你不知道的JavaScript(上)
链接:https://pan.baidu.com/s/1UEBetOr2Z94oEeu5VsQYXQ 提取码:etts 复制这段内容后打开百度网盘手机App,操作更方便哦
随机推荐
- AngularJS 学习笔记值post传值
问题直接调用$http.post()方法时 传值格式是这样的 php接收端接收到的是json格式的,怎么做的跟Ajax post那样传值呢? 分析原因,angular的$http.post()方法默认 ...
- perl lwp 获取请求头
<pre name="code" class="html">[root@dr-mysql01 ~]# cat getx.pl use LWP::Us ...
- Could not find or load main class
Then add '.' to your $CLASSPATH with CLASSPATH=.:$CLASSPATH or as a paramater with java -classpath . ...
- c++ anonymous namespace -- 匿名空间
c++ anonymous namespace -- 匿名空间 匿名空间,匿名类,匿名联合体,匿名结构体. 匿名空间 #include <stdio.h> namespace A ...
- php中实现快排与冒泡排序
快排 <?php function quicksort($str){ if(count($str)<=1) return $str;//如果个数不大于一,直接返回 $key=$str[0] ...
- 1.VMwareTools安装
1 选中虚拟机.右击.然后点击:安装Vmware-tool(最好是有网络的情况下安装) 2 将Vmware-tool的安装文件复制到暂时文件夹下,截图例如以下: 3 解压VMwareTools- ...
- POJ1505&&UVa714 Copying Books(DP)
Copying Books Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 7109 Accepted: 2221 Descrip ...
- JavaScript 中的事件对象(读书笔记思维导图)
在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含 ...
- C#语言实现ArcGIS数据源重置之Set Data Source功能
1.须要:依据选择的Mxd路径和目标数据源路径进行重置数据源.此处以(.Mdb为例): 主要利用到的接口: (1)IMapDocument (2)IMapControl2 (3)IWor ...
- java多线程控制台聊天室(转)
用java多线程实现一个控制台聊天室,呵呵,好玩! 聊天室服务器端 package tf.thread; import java.io.BufferedReader; import java.io.I ...