利用jsoup爬取百度网盘资源分享连接(多线程)
- - CSDN博客推荐文章 突然有一天就想说能不能用某种方法把百度网盘上分享的资源连接抓取下来,于是就动手了. 知乎上有人说过最好的方法就是http://pan.baidu.com/wap抓取,一看果然链接后面的uk值是一串数字,就想到可以自己拼装链接,循环不断的去抽取页面. 于是自己分析了下页面结构,就开始了.
突然有一天就想说能不能用某种方法把百度网盘上分享的资源连接抓取下来,于是就动手了。知乎上有人说过最好的方法就是http://pan.baidu.com/wap抓取,一看果然链接后面的uk值是一串数字,就想到可以自己拼装链接,循环不断的去抽取页面。于是自己分析了下页面结构,就开始了。(uk是10位数的数字,对于0000000001这种uk值还没想到很好的解决办法,对于1000000000这种就可以用uk++来实现不断循环了。)
从一开始写的时候,发现一秒钟就抽取了一个页面,想到之前用的webmagic爬虫里抓取页面就用了java的多线程技术,于是百度。。。直接上代码。
package getBaiduYunURL; import java.io.File; 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{ private long count= 1; public void run() { try{ for(this.count=1800011339;this.count<1813454114;this.count++){ PrintWriter printWriter = new PrintWriter(new FileWriter(new File("D:/自学/BaiduYunData/Data/url.txt"), true)); 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.print(title); Element content = doc.body(); Elements dataems=content.select("[data-ac=active]"); System.out.println(this.count); for(Element dataem:dataems){ Elements lists=dataem.select(".list-item"); String name=dataem.attr("data-fn"); if(name!=""){ System.out.println(name); printWriter.println(name); for(Element listem:lists){ String linkHref = url+listem.attr("href"); printWriter.println(linkHref); System.out.println(linkHref); } } } printWriter.close(); } }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class MultiThread { public static void main(String args[]) { mythread my = new mythread(); for(int i=0;i<10;i++){ new Thread(my).start(); } } }代码如上,很简单,我是把抓取的链接放在txt中,下一步就是把这些资源做成可以在线搜索,和很多网盘搜索一样,但是我这个比较低级。