QueryList轻松抓取微信公众号图片
优采云 发布时间: 2023-05-06 13:56QueryList 是一款非常优秀的 PHP 采集工具,它可以帮助你轻松地采集各类网站内容。在我们日常工作中,需要从微信公众号中获取一些有用的信息,如文章标题、作者、发布时间、封面等。而对于这些信息的获取,QueryList 可以轻松帮我们实现。本文将详细介绍如何使用 QueryList 来抓取微信公众号中的图片,并给出相应的代码示例。
第一部分:QueryList 简介
QueryList 是一个基于 PHP 的简单、灵活、强大的网络爬虫工具包。它底层使用了非常流行的 GuzzleHttp 库,支持 HTTP 请求和响应处理;同时还整合了非常流行的 DOM 解析库 DiDom 和 Symfony CssSelector 组件,支持 CSS 选择器和 XPath 表达式两种方式解析 HTML 文档。QueryList 还支持链式调用方式,让代码更加简洁易懂。
第二部分:微信公众号抓取图片实现过程
在抓取微信公众号图片之前,需要先获取微信公众号文章列表页的 HTML 内容。我们可以使用 QueryList 发送 HTTP 请求来获取 HTML 内容,并使用 CSS 选择器解析出文章列表页中所有文章的链接地址。具体代码如下:
php
use QL\QueryList;
$html = QueryList::get('https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzI5MjEyOTUyMA==&scene=124#wechat_redirect')
->rules([
'link'=>['a','href']
])
->query()
->getData();
$urls =$html->pluck('link')->all();
上述代码中,我们使用 get()方法发送 HTTP 请求,传入微信公众号文章列表页的链接地址,并使用 rules()方法配置 CSS 选择器规则,解析出所有文章链接地址。然后使用 pluck()方法提取链接地址,并将结果保存在$urls 数组中。
接下来,我们可以遍历$urls 数组,访问每篇文章的链接地址,并获取文章 HTML 内容。由于微信公众号文章内容是通过异步加载方式获取的,因此需要先模拟登录并获取 token 和 cookie 信息,然后再发送异步请求获取页面内容。具体代码如下:
php
use QL\QueryList;
$cookie ='填写你自己的 cookie';
$token ='填写你自己的 token';
foreach ($urls as $url){
$url = str_replace('#wechat_redirect','',$url);
$html = QueryList::get($url,[],[
'headers'=>[
'Cookie'=>$cookie,
'Referer'=>$url,
'User-Agent'=>'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With'=>'XMLHttpRequest'
],
'timeout'=> 30,
'verify'=> false
])->getHtml();
//解析 HTML 内容,获取文章中的图片地址
}
上述代码中,我们使用 get()方法发送 HTTP 请求,传入每篇文章的链接地址,并使用 headers 参数配置请求头信息,模拟登录获取 token 和 cookie 信息。然后使用 getHtml()方法获取 HTML 内容,并解析出文章中的图片地址。
第三部分:微信公众号图片抓取实现方式
在获取到文章 HTML 内容后,我们可以使用 QueryList 的 find()方法和 attr()方法来解析出文章中的图片地址,并对图片进行下载。具体代码如下:
php
use QL\QueryList;
$cookie ='填写你自己的 cookie';
$token ='填写你自己的 token';
foreach ($urls as $url){
$url = str_replace('#wechat_redirect','',$url);
$html = QueryList::get($url,[],[
'headers'=>[
'Cookie'=>$cookie,
'Referer'=>$url,
'User-Agent'=>'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With'=>'XMLHttpRequest'
],
'timeout'=> 30,
'verify'=> false
])->getHtml();
$ql = QueryList::html($html);
$images =$ql->find('.e7f4f8bd246c235418280d1f124e14f0_media_content img')->attrs('data-src');
foreach ($images as $image){
$filename = basename($image);
$filepath ='/path/to/save/'.$filename;
file_put_contents($filepath, file_get_contents($image));
}
}
上述代码中,我们使用 find()方法和 attrs()方法解析出文章中的图片地址,并使用 foreach 循环遍历所有图片地址,使用 file_put_contents()方法将图片保存在本地。
第四部分:注意事项
在使用 QueryList 抓取微信公众号图片时,需要注意以下几点:
1.需要模拟登录获取 token 和 cookie 信息;
2.需要解析异步加载的文章内容;
3.需要注意 HTTP 请求头信息的设置;
4.需要对图片进行分页下载,避免一次性下载过多图片导致网络请求失败。
第五部分:总结
本文主要介绍了如何使用 QueryList 抓取微信公众号中的图片。通过上述代码示例,相信大家已经可以轻松实现微信公众号图片抓取功能。在实际开发中,我们还可以根据具体需求对代码进行优化和扩展,如增加异常处理、并发下载等功能。最后,希望本文能对大家有所帮助。
优采云,提供一站式 SEO 优化服务,让您的网站更上一层楼。欢迎访问我们的官网:www.ucaiyun.com。