澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站搜集爬取百度网盘分享文

前情提要:如今采纳PHP完结了简便易行的网盘寻觅程序,而且关系了微信徒人平台,名字是网盘随笔。顾客可以由此群众号输加入关贸总协定协会键字,大伙儿号会再次来到相应的网盘下载地址。正是这么三个简易的成效,相通超级多的网盘寻觅类网址,笔者这些访问和查找程序都以PHP完毕的,全文和分词寻找部分使用到了开源软件xunsearch。

1 写在后边

前些天想要在百度网盘里面寻觅一些pdf能源,张开在此从前保存的一个专程搜索百度网盘能源的页面so.baiduyun.me ,页面转了长久,终于出来,不过现身的却是Error 522,链接失效了。最后,在互连网找到贰个足以用之处http://pan.java1234.com/,这几个地点的确能够查找百度网盘财富,不过广告超多,稍有不慎,就踏向了叁个广告页面,神烦。那时就想能还是无法招来到这么些网页中能源搜索的地点,然后自个儿依照那一个地点来效仿乞请,进而获取查询结果。打开浏览器的调试工具,随意输入三个入眼字展开查询,点击查询,然后开展剖析。深入分析发掘了一个url央求重回的难为百度网盘寻觅结果,数据是json格式。找到了那几个得到寻觅结果url之后就好办了。大家得以完全自身写一个Winform分界面,然后通过这一个url去模拟诉求,获取结果,那样就不曾广告了,想怎么弄就怎么弄,上边介绍一下,如何产生那意气风发多种的进度。

真实上线案例:搜盘子-网盘电影能源站

2 分析

上一篇([PHP] 网盘寻觅引擎-收集爬取百度网盘分享文件贯彻网盘找出)中笔者最主要介绍了何等去赢得第一次全国代表大会批判的百度网盘顾客,那大器晚成篇介绍怎样获得钦点网盘客商的分享列表。同样的规律,也是找到百度赢得分享列表的接口,然后去巡回就能够了。

2.1 获取诉求头消息

福寿绵绵这一个程序的十分重要正是哪些获取http://pan.java1234.com/百度网盘找出结果的url,首先大家张开那个页面,运营浏览器调节和测量检验,然后轻松输入三个要害字,点击查询。

澳门新浦京娱乐场网站 1

上海体育场合大家能够见到,有贰个诉求url,重回来的结果正是页面上突显的探究结果。我们得以看看它的号令地址甚至号令头音信。

澳门新浦京娱乐场网站 2

经过查阅headers面板能够精晓乞求音讯如下:

  • 伸手地址:
  • User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
  • Reference:
  • Host:pan1234.com

知道央求地址,user-agent,host,referer必要头音信,大家就能够协会出一个搜寻财富的诉求,未来大家来剖析一下这些央求地址的特色,那个央浼地址有一个询问参数q=win7,而大家知道曾经在搜索框里面输入的严重性字便是win7,由此能够看清,该查询参数代表的查找关键字。大家得以把这些伏乞地址在浏览器中开垦,然后去去退换那些查询参数,来解析这几个查询参数各有哪些功能。

因此分析,要求地址中的q参数代表的是搜索关键字;start参数代表的是寻找页面,黄金时代共有10页,0代表第生龙活虎页,10表示第二页,···,90象征第十页,该网页最高展现100条财富结果;而最后的&_=1478436979649能够删掉,在伸手中从不本质的意义。

 

2.2 深入分析重临的检索结果格式

透过2.1节深入分析,大家知道搜索结果的url地址,未来大家随意的结构四个之类。

http://pan1234.com/server3?jsoncallback=jQuery19109864917922941505_1478436979648&q=win7&start=0

澳门新浦京娱乐场网站搜集爬取百度网盘分享文件得以完结网盘找出,百度网盘财富找出器。在浏览器中展示的效劳如下:

澳门新浦京娱乐场网站 3

咱俩得以知道寻找结果是以json字符串的格式重返的。再次回到的是三个目的数组,每种能源对象都包蕴了title,content,unescapedUrl两性格情。

明亮了回去的json格式结构,大家就足以在c#中树立相呼应的类,然后将这么些json数据经过预管理,之后便能够反体系化成为相呼应的对象。

澳门新浦京娱乐场网站搜集爬取百度网盘分享文件得以完结网盘找出,百度网盘财富找出器。寻觅分享接口

3.程序完结

上边将贴出实现该程序的要紧代码,源代码能够到本文章的末尾自行下载。

无论找一个网盘客商的享受页面,点击最上面的分页链接,能够观察发起的伸手接口,那一个便是获得共享列表的接口。

3.1 数据实体类

public class SearchResult
{
    public BDWPResource[] resources { get; set; }
}

public class BDWPResource
{
    public string title { get; set; }
    public string content { get; set; }
    public string unescapedUrl { get; set; }
}

澳门新浦京娱乐场网站 4

3.2 数据供给及预管理

class HttpHelper
{
    static readonly string urlTemplate = "http://pan1234.com/server3?jsoncallback=jQuery191042552483269501273_1478315152726&q={0}&start={1}";
    public static SearchResult Requset(string key, string start)
    {
        string url = string.Format(urlTemplate, key, start);
        HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
        httpRequest.Accept = "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
        httpRequest.Host = "pan1234.com";
        httpRequest.Referer = "http://pan.java1234.com/result.jsp?wp=0&op=0&ty=gn&q="   Uri.EscapeUriString(key);
        try
        {
            HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
            Stream s = httpResponse.GetResponseStream();
            StreamReader sr = new StreamReader(s);
            string jsonString = sr.ReadToEnd();
            string jsonProcessed = null;
            if ((jsonProcessed = JsonPreProcessing(jsonString)) != null)
            {
                SearchResult searchResult = UtilityClass.GetObject<SearchResult>(jsonProcessed);
                return searchResult;
            }
            return null;
        }
        catch
        {
            return null;
        }
    }

    public static string JsonPreProcessing(string jsonString)
    {
        int startIndex = jsonString.IndexOf("(");
        if (startIndex > 0)
        {
            string json = jsonString.Substring(startIndex   1);
            return "{"resources":"   json.Remove(json.Length - 3)   "}";
        }
        else
        {
            return null;
        }
    }
}

不论什么事的央浼url是其朝气蓬勃 

3.3 json数据反系列化对象

class UtilityClass
{
    public static T GetObject<T>(string json)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
        T obj = (T)serializer.ReadObject(ms);
        return obj;
    }
}

 

3.4 界面

分界面设计如下:

澳门新浦京娱乐场网站 5

将网络央浼的代码放到职责线程中张开实践。代码如下:

Thread thread = new Thread(() =>
{
    for (int i = 0; i < 100; i  = 10)
    {
        if (isSearch)
        {
            SearchResult sr = HttpHelper.Requset(key, i.ToString());
            if (sr != null)
            {
                foreach (BDWPResource resource in sr.resources)
                {
                    BindResource(resource);
                }
            }
        }
        else break;
    }
    //搜索完成
    SearchOver();
});
thread.IsBackground = true;
thread.Start();

//绑定数据代码
private void BindResource(BDWPResource resource)
{
    string title = resource.title.Replace("</b>", "").Replace("<b>","");
    string content = resource.content.Replace("</b>", "").Replace("<b>", "");

    this.Invoke(new Action<string, string, string>((tle, ctt, url) => 
    {
        this.dataGridView1.Rows.Add(tle, ctt, url);
        this.lblResult.Text = (Int32.Parse(this.lblResult.Text)   1).ToString();
        this.pgsBar.Value  ;
    }), title, content, resource.unescapedUrl);
}
//搜索完成
private void SearchOver()
{
    this.Invoke(new Action(() => {
        this.btnSearch.Text = "开始搜索";
        this.btnSearch.Enabled = true;
        this.btnStop.Enabled = false;
        this.isSearch = true;
    }));
}

调用接口获取数据

3.5 程序运营结果

澳门新浦京娱乐场网站 6

澳门新浦京娱乐场网站 7

运用PHP的CU奥迪Q3L去央浼那个接口,看看是或不是能够赢获得数码。测量试验后意识,重回的是{"errno":2,"request_id":177538一九二八},并不曾赢获得多少。那是因为百度对header头音讯里面包车型地铁Referer进行了限定,小编把Referer改成 

4 结论

该程序寻觅速度临时候相当慢,不经常间快,刚最初点击搜索平时都要等一会才有结果,可能有互连网延迟的因由。但开掘搜索一会尚未结果的时候,可以先甘休搜索,然后再点击开端寻找,就能有追寻结果出来了。

测验代码如下:

5 资源

源代码下载链接:

<?php
/*
* 获取分享列表
*/
class TextsSpider{
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}
$textsSpider=new TextsSpider();
$header=array(
    'Referer:http://www.baidu.com'
);
$str=$textsSpider->sendRequest("https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=60&limit=60&query_uk=4162539356",null,$header);
echo $str;

享用列表的json结果如下:

{
    "errno": 0,
    "request_id": 1985680203,
    "total_count": 1025,
    "records": [
        {
            "feed_type": "share",
            "category": 6,
            "public": "1",
            "shareid": "98963537",
            "data_id": "1799945104803474515",
            "title": "《通灵少女》2017.同步台视(完结待删)",
            "third": 0,
            "clienttype": 0,
            "filecount": 1,
            "uk": 4162539356,
            "username": "a20****3762",
            "feed_time": 1493626027308,
            "desc": "",
            "avatar_url": "https://ss0.bdstatic.com/7Ls0a8Sm1A5BphGlnYG/sys/portrait/item/01f8831f.jpg",
            "dir_cnt": 1,
            "filelist": [
                {
                    "server_filename": "《通灵少女》2017.同步台视(完结待删)",
                    "category": 6,
                    "isdir": 1,
                    "size": 1024,
                    "fs_id": 98994643773159,
                    "path": "/《通灵少女》2017.同步台视(完结待删)",
                    "md5": "0",
                    "sign": "86de8a14f72e6e3798d525c689c0e4575b1a7728",
                    "time_stamp": 1493895381
                }
            ],
            "source_uid": "528742401",
            "source_id": "98963537",
            "shorturl": "1pKPCF0J",
            "vCnt": 356,
            "dCnt": 29,
            "tCnt": 184
        },
        {
            "source_uid": "528742401",
            "source_id": "152434783",
            "shorturl": "1qYdhFkC",
            "vCnt": 1022,
            "dCnt": 29,
            "tCnt": 345
        }
    ]
}

或许和上次大器晚成律,综合性的寻觅站,能够把有效的数量都留给存住,笔者只是做个最简便易行的,就纵然了标题title和shareid

每种分享文件的下载页面url是如此的: ,只须要客商号码和共享id就可以拼出下载url。

 

变化分页接口U奥迪Q3L

要是顾客最多分享了30000个,每页五14个,可以分500页,那样url能够这么变化

<?php
/*
* 获取分享列表
*/
class TextsSpider{
    private $pages=500;//分页数
    private $start=60;//每页个数
    /**
    * 生成分页接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i  ){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start={$start}&limit={$this->start}&query_uk={$rootUk}";
            $urls[]=$url;
        }
        return $urls;
    }

}
$textsSpider=new TextsSpider();
$urls=$textsSpider->makeUrl(4162539356);
print_r($urls);

分页的url结果是那般的

Array
(
    [0] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=0&limit=60&query_uk=4162539356
    [1] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=60&limit=60&query_uk=4162539356
    [2] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=120&limit=60&query_uk=4162539356
    [3] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=180&limit=60&query_uk=4162539356
    [4] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=240&limit=60&query_uk=4162539356
    [5] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=300&limit=60&query_uk=4162539356
    [6] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=360&limit=60&query_uk=4162539356
    [7] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=420&limit=60&query_uk=4162539356
    [8] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=480&limit=60&query_uk=4162539356
    [9] => https://pan.baidu.com/pcloud/feed/getsharelist?&auth_type=1&request_location=share_home&start=540&limit=60&query_uk=4162539356

 

数据表存款和储蓄结构

CREATE TABLE `texts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL DEFAULT '',
  `url` varchar(255) NOT NULL DEFAULT '',
  `time` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `title` (`title`(250))
) ENGINE=MyISAM

 

 循环读取的时候,应该潜心,每便间距一定的时刻,幸免被封。

下黄金年代篇重要介绍xunsearch分词和全文字笔迹核准索和此番的完整代码

示范地址,关怀微信徒人号:网盘随笔,或然扫描下面包车型客车二维码

澳门新浦京娱乐场网站 8

上意气风发篇循环获取uk并存入数据库的完整代码如下:

<?php
/*
* 获取订阅者
*/
class UkSpider{
    private $pages;//分页数
    private $start=24;//每页个数
    private $db=null;//数据库
    public function __construct($pages=100){
        $this->pages=$pages;
        $this->db = new PDO("mysql:host=localhost;dbname=pan","root","root");
        $this->db->query('set names utf8');
    }
    /**
    * 生成分页接口的url
    */
    public function makeUrl($rootUk){
        $urls=array();
        for($i=0;$i<=$this->pages;$i  ){
            $start=$this->start*$i;
            $url="https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit={$this->start}&start={$start}";
            $urls[]=$url;
        }
        return $urls;
    }
    /**
    * 根据URL获取订阅用户id
    */
    public function getFollowsByUrl($url){
        $result=$this->sendRequest($url);
        $arr=json_decode($result,true);
        if(empty($arr)||!isset($arr['follow_list'])){
            return;
        }
        $ret=array();
        foreach($arr['follow_list'] as $fan){
            $ret[]=$fan['follow_uk'];
        }

        return $ret;
    }
    /**
    * 发送请求
    */
    public function sendRequest($url,$data = null,$header=null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        if (!empty($header)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
    /*
    获取到的uks存入数据
    */
    public function addUks($uks){
        foreach($uks as $uk){
            $sql="insert into uks (uk)values({$uk})";
            $this->db->prepare($sql)->execute();
        }

    }
    /*
    获取某个用户的所有订阅并入库
    */
    public function sleepGetByUk($uk){
        $urls=$this->makeUrl($uk);
        //$this->updateUkFollow($uk);
        //循环分页url
        foreach($urls as $url){
            echo "loading:".$url."rn";
            //随机睡眠7到11秒
            $second=rand(7,11);
            echo "sleep...{$second}srn";
            sleep($second);
            //发起请求
            $followList=$this->getFollowsByUrl($url);
            //如果已经没有数据了,要停掉请求
            if(empty($followList)){
                break;
            }
            $this->addUks($followList);
        }
    }
    /*从数据库取get_follow=0的uk*/
    public function getUksFromDb(){
        $sth = $this->db->prepare("select * from uks where get_follow=0");
        $sth->execute();
        $uks = $sth->fetchAll(PDO::FETCH_ASSOC);
        $result=array();
        foreach ($uks as $key => $uk) {
            $result[]=$uk['uk'];
        }
        return $result;
    }
    /*已经取过follow的置为1*/
    public function updateUkFollow($uk){
        $sql="UPDATE uks SET get_follow=1 where uk={$uk}";
        $this->db->prepare($sql)->execute();
    }
}

$ukSpider=new UkSpider();
$uks=$ukSpider->getUksFromDb();
foreach($uks as $uk){
    $ukSpider->sleepGetByUk($uk);
}

 

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站搜集爬取百度网盘分享文