标题起的太大了,都是骗人的。最近使用PHP实现了简单的网盘搜索程序,并且关联了微信公众平台。用户可以通过公众号输入关键字,公众号会返回相应的网盘下载地址。就是这么一个简单的功能,类似很多的网盘搜索类网站,我这个采集和搜索程序都是PHP实现的,全文和分词搜索部分使用到了开源软件xunsearch,现在就来介绍一下实现过程。

1. 获取一批网盘用户

2. 根据网盘用户获取分享列表

3. xunsearch实现全文检索和分词检索

4. 微信公众平台接口开发

功能展示:

获取并采集百度网盘用户

要想获取到分享列表,首先要先把百度的用户信息收集下来,现在我来介绍如何找到一大批百度的用户。先把浏览器的审查元素打开,查看HTTP的请求包,打开自己的百度网盘主页地址 https://pan.baidu.com/pcloud/home ,查看订阅的用户列表,观察请求。

https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=0&bdstoken=bc329b0677cad94231e973953a09b46f&channel=chunlei&clienttype=0&web=1&logid=MTQ5MzczNDgzMjgwMTAuOTE3Mzc4MDc4NDQ3NjU0OA== 这个请求就是获取订阅用户列表的接口。

上面的参数含义分别是:query_uk (我自己的id编号,百度都是以uk来命名的)  ; limit (分页时每页显示的条数) ; start (分页起始编号) ; 剩下的参数全都并无任何卵用。

精简后的接口地址是:https://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$uk}&limit=24&start={$start}

处理分页的获取订阅者接口地址

先暂时假设,我订阅了2400个用户,这个数量基本够用了。每页显示24个用户,那么就会分100页,则先看如何生成这个100个url。

<?php
/*
* 获取订阅者
*/
class UkSpider{private $pages;//分页数private $start=24;//每页个数public function __construct($pages=100){$this->pages=$pages;}/*** 生成接口的url*/public function makeUrl($rootUk){$urls=array();for($i=0;$i<=$this->pages;$i++){$start=$this->start*$i;$url="http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk={$rootUk}&limit=24&start={$start}";$urls[]=$url;}return $urls;}
}$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
print_r($urls);

获取的url接口列表结果:

Array
([0] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=0[1] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=24[2] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=48[3] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=72[4] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=96[5] => http://pan.baidu.com/pcloud/friend/getfollowlist?query_uk=3317165372&limit=24&start=120

使用CURL请求接口地址

请求接口地址时,可以直接使用file_get_contents()函数,但是我这里使用的是PHP的CURL扩展函数,因为在获取分享文件列表时需要修改请求的header头信息。

此接口返回的JSON信息结构如下

{"errno": 0,"request_id": 3319309807,"total_count": 3,"follow_list": [{"type": -1,"follow_uname": "热心***联盟","avatar_url": "http://himg.bdimg.com/sys/portrait/item/7fd8667f.jpg","intro": "","user_type": 0,"is_vip": 0,"follow_count": 0,"fans_count": 21677,"follow_time": 1493550371,"pubshare_count": 23467,"follow_uk": 3631952313,"album_count": 0},{"type": -1,"follow_uname": "绾*兮","avatar_url": "http://himg.bdimg.com/sys/portrait/item/fa5ec198.jpg","intro": "万里淘金,为你推荐精品全本小说,满满的资源福利!","user_type": 6,"is_vip": 0,"follow_count": 10,"fans_count": 5463,"follow_time": 1493548024,"pubshare_count": 2448,"follow_uk": 1587328030,"album_count": 0},{"type": -1,"follow_uname": "自**检票","avatar_url": "http://himg.bdimg.com/sys/portrait/item/8c5b2810.jpg","intro": "没事看点小说。","user_type": 0,"is_vip": 0,"follow_count": 299,"fans_count": 60771,"follow_time": 1493547941,"pubshare_count": 13404,"follow_uk": 1528087287,"album_count": 0}]
}

如果要做一个综合性的网盘搜索网站,就可以把这些信息全都存入数据库,现在我只是做一个很简单的小说搜索网站,因此只留下了订阅盘主的uk编号。

<?php
/*
* 获取订阅者
*/
class UkSpider{private $pages;//分页数private $start=24;//每页个数public function __construct($pages=100){$this->pages=$pages;}/*** 生成接口的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=24&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;}
}$ukSpider=new UkSpider();
$urls=$ukSpider->makeUrl(3317165372);
//循环分页url
foreach($urls as $url){echo "loading:".$url."\r\n";//随机睡眠7到11秒$second=rand(7,11);echo "sleep...{$second}s\r\n";sleep($second);//发起请求$followList=$ukSpider->getFollowsByUrl($url);//如果已经没有数据了,要停掉请求if(empty($followList)){break;}print_r($followList);
}

循环请求上一步生成的urls,注意,此处要间隔一定秒数来发请求,否则会被直接封掉的,并且要判断如果没有数据了要停掉循环。此脚本一定要在命令行模式下运行,在浏览器上会直接超时死掉了。

循环往复采集用户uk编号

使用mysql数据库,建一张表例如uks,存储采集到的用户编号,表结构如下:

CREATE TABLE `uks` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`uk` varchar(100) NOT NULL DEFAULT '',`get_follow` tinyint(4) NOT NULL DEFAULT '0',`get_share` tinyint(4) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `uk_2` (`uk`),KEY `uk` (`uk`)
)

先存入一批,然后再根据这批继续找订阅盘主,不停的循环,里面的重要字段是:uk是唯一的 ; ’get_follow默认为0 当第二遍找它的订阅列表时,修改为1,防止重复采集。

下一篇介绍根据uk获取分享列表,并且入库

演示地址,关注微信公众号:网盘小说,或者扫描下面的二维码

[PHP] 网盘搜索引擎-采集爬取百度网盘分享文件实现网盘搜索相关推荐

  1. 网易云音乐信息爬取(存储为 csv文件)喜马拉雅音乐爬取

    1. 网易云音乐爬取 分析 源代码 爬取结果, (可使用Excel 表格打开) 2. 喜马拉雅音乐爬取 分析 源代码 爬取结果 获取网易云音乐歌手信息 后续会做一个 网易云音乐爬取 + Tkinter ...

  2. python爬取百度云资源分享吧_python爬取百度云盘资源

    小测试,初学python. 1.[代码][Python]代码 import urllib import urllib.request import webbrowser import re def y ...

  3. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  4. Python爬虫实战之爬取百度音乐歌曲

    Python爬虫爬取百度音乐歌曲 整体思路如下: 1.搜索:通过搜索界面输入歌手名字找到歌手的歌曲信息.千千音乐:网址 2.找到歌曲信息:通过遍历歌曲列表信息界面获取每个歌曲的ID,以及歌曲的总数 3 ...

  5. php 爬取一个人的网易云评论,网易云音乐评论爬取

    # coding=gbk import requests import json c='网易云爬虫实战一' print(c) music_url = 'https://music.163.com/#/ ...

  6. 爬取百度网盘资源报user is not authorized, hitcode:119

    爬取百度网盘资源报user is not authorized, hitcode:119 一.总结 一句话总结: 可能是百度网盘禁止非客户端环境下载大文件,所以将请求头改为客户端:'User-Agen ...

  7. 利用jsoup爬取百度网盘资源分享连接(多线程)(2)

    之前的博客 利用jsoup爬取百度网盘资源分享连接(多线程) 已经说明了怎么抓取数据,抓取完数据就是共享这些资源了,说白了就是搭建一个百度网盘资源搜索网站,我是利用WAMP搭建的. 主页面index. ...

  8. python爬虫之爬取百度网盘

    爬虫之爬取百度网盘(python) #coding: utf8 """ author:haoning create time: 2015-8-15 "" ...

  9. 【Python】python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 标签: <无> 代码片段 [代码][Python]代码 import urllib import urllib.request impor ...

最新文章

  1. Hadoop Hive sql语法详解
  2. POJ3784-Running Median(运行中位数)【链表】
  3. Check Point CEO:“我们正在积极寻找收购目标”
  4. parse 日期_日期parse()方法以及JavaScript中的示例
  5. 信息学奥赛一本通 1013:温度表达转化 | OpenJudge NOI 1.3 08
  6. ubuntu 18.04.1 使用心得
  7. linux软件卸载不了,linux软件卸载
  8. 关于hadoop处理大量小文件情况的解决方法
  9. Android系统性能优化(60)---LeakCanary使用详解
  10. Linux系统管理第六周作业【Linux微职位】
  11. [转]Python中下划线---完全解读
  12. python到底是啥_Python语言中的__init__到底是干什么的?
  13. oracle怎么不让别的电脑连接,[转载]修改计算机名字导致oracle连接不上的解决方案...
  14. 怎么打包java文件夹_怎么把文件夹打包成jar
  15. winsxs目录清理工具
  16. (每日一练c++)有效的数独
  17. eclipse-svn插件
  18. springboot整合redisson实现分布式锁
  19. Java中的Filter
  20. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)

热门文章

  1. 快看,秋天的校园景色是多么美丽
  2. EasyRecovery16电脑硬盘数据恢复软件功能讲解
  3. AWT—鼠标监听,窗口监听,键盘监听
  4. OneNote 2003 中文版 完整 单独安装程序 下载
  5. 2020-08-10 Mybatis配置、使用Map集合传递SQL参数、核心配置文件解析、给包取别名
  6. QPushButton菜单设置
  7. 卫星影像的AI分类与识别参赛笔记
  8. Android Studio第一次作业:APP门户界面设计
  9. python做圆柱绕流_基于snappyHexMesh生成网格的圆柱绕流算例
  10. 汽车自动贩卖机出来了买车全部流程只需20分钟