php实现公众号文章图片去重,轻松抓取高清美图

优采云 发布时间: 2023-04-22 03:56

  作为一名自媒体人,我们经常需要从微信公众号上抓取文章,但是如果直接下载所有图片,可能会出现重复的情况。那么如何去重呢?今天,笔者就来介绍一下php抓取公众号文章图片去重的方法。

  一、准备工作

  在开始之前,我们需要安装php环境和相关的扩展库。这里我使用的是php7和curl扩展库。同时,我们还需要获取微信公众号的cookie和token信息。具体获取方法可以参考优采云(www.ucaiyun.com)的相关教程。

  二、获取文章列表

  首先,我们需要从微信公众号上获取文章列表。这里,我们可以使用curl库发送http请求,然后解析返回的json数据。具体代码如下:

  

<?php

//设置请求地址

$url ="https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzU2NzA2MDk5MQ==&f=json&offset=0&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=uKjJZVQzm8FvnbuV7c%2Bjy3qf8rT9rOQd%2FZuWkfM8OvRbiYtY1Dp6GqW8nTg9rLs%2B&wxtoken=&appmsg_token=1155_qKjJZVQzm8FvnbuV7c-jy3qf8rT9rOQd_cba0c24e593b986200c12fd327b537c0-";

//设置请求头

$header = array(

"Host: mp.weixin.qq.com",

"Connection: keep-alive",

"User-Agent:a9694ebf4d02ef427830292349e3172c/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299",

"X-Requested-With: XMLHttpRequest",

"Referer: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU2NzA2MDk5MQ==&scene=124&devicetype=Windows+10&version=62080079&lang=zh_CN&ascene=1&winzoom=1",

"Accept-Encoding: gzip, deflate, br",

"Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"

);

//发送http请求

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER,$header);

$response = curl_exec($ch);

curl_close($ch);

//解析json数据

$json = json_decode($response, true);

$articles =$json["general_msg_list"]["list"];

?>

  三、获取文章内容

  接下来,我们需要从文章列表中获取每篇文章的链接,然后再次发送http请求获取文章内容。这里,我们同样可以使用curl库发送http请求,然后解析返回的html数据。具体代码如下:

  

  

<?php

foreach ($articles as $article){

//获取文章链接

$url =$article["app_msg_ext_info"]["content_url"];

if (strpos($url,"http")=== false){

$url ="https://mp.weixin.qq.com".$url;

}

//发送http请求

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_COOKIE,"cookie");

curl_setopt($ch, CURLOPT_REFERER,"https://mp.weixin.qq.com/");

$response = curl_exec($ch);

curl_close($ch);

//解析html数据

$doc = new DOMDocument();

@$doc->loadHTML($response);

$imgs =$doc->getElementsByTagName("img");

//下载图片并去重

foreach ($imgs as $img){

//获取图片链接

$src =$img->getAttribute("8d777f385d3dfec8815d20f7496026dc-src");

if (empty($src)){

$src =$img->getAttribute("src");

}

//下载图片

if (!empty($src)){

$filename = basename(parse_url($src)["path"]);

if (!file_exists($filename)){

file_put_contents($filename, file_get_contents($src));

}

}

}

}

?>

  四、去重处理

  最后,我们需要对下载的图片进行去重处理。这里,我们可以使用md5函数对每张图片进行哈希计算,并将结果保存到一个数组中。具体代码如下:

  

<?php

$hashes = array();

foreach ($imgs as $img){

//获取图片链接

$src =$img->getAttribute("8d777f385d3dfec8815d20f7496026dc-src");

if (empty($src)){

$src =$img->getAttribute("src");

}

//下载图片并去重

if (!empty($src)){

$filename = basename(parse_url($src)["path"]);

$hash = md5_file($filename);

if (!in_f1f713c9e000f5d3f280adbd124df4f5($hash,$hashes)){

array_push($hashes,$hash);

file_put_contents($filename, file_get_contents($src));

}

}

}

?>

  五、总结

  通过上述方法,我们可以轻松地从微信公众号上抓取文章,并对其中的图片进行去重处理。同时,我们还可以根据需要对代码进行优化和扩展,以提高效率和功能性。

  本文由优采云(www.ucaiyun.com)原创,旨在为广大自媒体人提供有用的工具和技巧,帮助大家更加便捷地进行文章创作和发布。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线