为了让大家对印象深刻
本次将以一个写真站点为例
批量下载站点作品
https://gitee.com/haleyleozhang/curl_pics
随便打开一个页面
https://www.meitulu.com/t/yanni/
对着列表页的第一个信息块儿边上,鼠标右键审查元素
分析列表信息所处页面结构中的位置,以方便我们获取核心信息
因为这是列表信息,肯定是被一个元素包起来,然后循环渲染的
我们很容易知道
<ul class="img">
是这家伙把它包起来的
所以我们首先现在需要通过 curl 之类的东西这页信息获取到
这种站点一般都要防爬虫的
我们应该伪装自己,让这个服务器以为我们是普通浏览器正常访问
这时候我们就需要查看浏览器正常访问时 http头部信息
是怎样的了
我们点进一个作品,对着一张内容图片审查元素
可以知道这个站点的图片上传规则为
图片前缀 + 图片数量 + 图片结尾后缀
https://mtl.ttsqgs.com/images/img/7709/ 1 .jpg
F12
打开调试控制台,选中 NetWork
中的 Doc
通过 Ctrl + F5
模仿着第一次进来时的样子
我们就可以看到首次访问该页面的响应头与请求头了
Request Headers
就是我们请求的头部信息了
本次的头部信息大致如下
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:no-cache
Cookie:UM_distinctid=1615a0d9fd2166-06355844e9b39b-1571466f-1fa400-1615a0d9fd316c; CNZZDATA1255487232=1958726030-1517653567-%7C1517653567; CNZZDATA1255357127=605834772-1517631364-https%253A%252F%252Fwww.baidu.com%252F%7C1517671118; Hm_lvt_1e2b00875d672f10b4eee3965366013f=1517634298; Hm_lpvt_1e2b00875d672f10b4eee3965366013f=1517672911
Host:www.meitulu.com
Pragma:no-cache
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0
这里面含有 gzip 头部信息
我们也得 gzip 解压
这是一个 https 的站点
我们得记着配置下 https 证书相关的东西
很多站点都是有防盗链功能的
也就是通过头部信息中的 Refer
来实现鉴别这次请求是否来自本站,然后决定要不要给你传输图片资源
所以我们下载的时候,记着带上一个头部信息就好拉
我们接下来封装一个可以完成本次功能的cURL功能类
并将其放置到当前项目的 lib 目录下
class CurlRequest
{
/**
* POST或GET请求,并返回数据
* @param String url 访问地址
* @param Array|JSON data 用于POST的数据
* @param Array header HTTP头请求
* @return String 返回数据
*/
public static function run($url, $data = null, $header = null)
{
//请求 URL,返回该 URL 的内容
$ch = curl_init(); // 初始化curl
curl_setopt($ch, CURLOPT_URL, $url); // 设置访问的 URL
curl_setopt($ch, CURLOPT_HEADER, 0); // 放弃 URL 的头信息
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回字符串,而不直接输出
// Add Headers?
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
// Https ?
if (preg_match('/^https/', $url)) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不做服务器的验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 做服务器的证书验证
}
// POST method?
if ($data) {
curl_setopt($ch, CURLOPT_POST, true); // 设置为 POST 请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置POST的请求数据
}
// 模拟重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// gzip 解压
curl_setopt($ch, CURLOPT_ENCODING,'gzip');
$content = curl_exec($ch); // 开始访问指定URL
curl_close($ch); // 关闭 cURL 释放资源
return $content;
}
}
将数据拉取下来后
经过正则匹配,我们可以提取到文章内容
然后我们写几个正则匹配,按一定格式存储数据,方便一会儿批量下载
我自己设定的格式 如下
{
"src": [],
"title": [],
"pages": [],
}
这部分,云天河就不多说了
你们直接看我 lib
目录下的 DownLoad.php
是怎么写的就行
我们命令行到项目根目录下 执行
php .\index.php
即可批量下载图片了
所以 现在老哥们会爬虫了吗
评论列表点此评论