PHP实现微信文章内容抓取,轻松获取想要的信息!
优采云 发布时间: 2023-04-21 06:39在当今社交媒体时代,微信已成为人们日常生活中必不可少的一部分。而对于一些程序员、网络爱好者等来说,如何利用技术手段获取微信公众号文章内容成为了一个热门话题。本文将介绍如何使用php实现微信文章内容抓取,帮助大家轻松获取自己想要的信息。
一、了解微信公众号文章抓取的原理
在进行微信公众号文章抓取之前,我们需要先了解一下其原理。通常情况下,我们可以通过模拟用户登录微信公众号平台并获取相应的cookie信息,然后再通过访问相应的接口来实现文章内容的抓取。具体而言,主要包括以下几个步骤:
1.模拟用户登录并获取cookie信息
2.通过cookie信息访问特定接口并获取响应数据
3.解析响应数据并提取所需信息
4.存储所需信息并做进一步处理
二、使用php实现微信公众号文章抓取
1.模拟用户登录并获取cookie信息
首先,我们需要使用php模拟用户登录并获取相应的cookie信息。这里我们可以使用curl库来实现相关操作。具体而言,我们需要模拟用户访问微信公众号平台登录页面,并提供相应的登录信息。代码如下:
php
<?php
//模拟用户登录并获取cookie信息
function login($username,$password)
{
//初始化curl
$ch = curl_init();
//设置curl选项
curl_setopt($ch, CURLOPT_URL,'https://mp.weixin.qq.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//执行curl操作并获取响应数据
$output = curl_exec($ch);
//解析响应数据并获取相关信息
preg_match('/token=(\d+)/',$output,$matches);
$token = isset($matches[1])?$matches[1]:'';
preg_match('/name="imgcode" value="(.*?)"/',$output,$matches);
$imgcode = isset($matches[1])?$matches[1]:'';
preg_match('/name="f" value="(.*?)"/',$output,$matches);
$f= isset($matches[1])?$matches[1]:'';
preg_match('/name="userlang" value="(.*?)"/',$output,$matches);
$userlang = isset($matches[1])?$matches[1]:'';
//构造登录请求参数
$data = array(
'username'=> urlencode($username),
'pwd'=> md5(urlencode($password)),
'imgcode'=> urlencode($imgcode),
'f'=> urlencode($f),
'userlang'=> urlencode($userlang),
'token'=> urlencode($token),
'7572559ca86e781ba8fe8073a0b725c6'=>'zh_CN',
'ajax'=>1,
);
//构造登录请求头部信息
$headers = array(
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'Referer: https://mp.weixin.qq.com/',
'X-Requested-With: XMLHttpRequest',
);
//发送登录请求并获取响应数据
curl_setopt($ch, CURLOPT_URL,'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
$output = curl_exec($ch);
//从响应数据中获取cookie信息
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi',$output,$matches);
$cookies = array();
foreach ($matches[1] as $item){
parse_str($item,$cookie);
$cookies = array_merge($cookies,$cookie);
}
//关闭curl
curl_close($ch);
return $cookies;
}
?>
2.通过cookie信息访问特定接口并获取响应数据
在获取到相应的cookie信息之后,我们就可以通过访问微信公众号平台的特定接口来获取文章内容了。具体而言,我们需要构造相应的请求参数,并将之前获取到的cookie信息附加到请求头部中。代码如下:
php
<?php
//获取指定公众号的文章列表
function getArticleList($cookies,$query)
{
//初始化curl
$ch = curl_init();
//构造请求参数
$params = array(
'token'=>'',
'7572559ca86e781ba8fe8073a0b725c6'=>'zh_CN',
'f'=>'json',
'ajax'=>1,
'random'=> rand(1000000000, 9999999999),
'query'=>$query,
'begin'=>0,
'count'=>5,
'type'=>9,
);
//构造请求头部信息
$headers = array(
'Cookie:'.http_build_query($cookies,'',';'),
'Referer: https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=',
'X-Requested-With: XMLHttpRequest',
);
//发送请求并获取响应数据
curl_setopt($ch, CURLOPT_URL,'https://mp.weixin.qq.com/cgi-bin/appmsg');
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
//关闭curl
curl_close($ch);
return json_decode($output, true);
}
?>
3.解析响应数据并提取所需信息
在获取到相应的响应数据之后,我们需要对其进行解析并提取出所需的文章信息。具体而言,我们可以使用php内置的simplexml库来解析xml格式数据,并使用正则表达式等方式来提取出所需的信息。代码如下:
php
<?php
//解析文章列表数据
function parseArticleList($data)
{
$articles = array();
foreach ($data['app_msg_list'] as $item){
$article = array(
'title'=> isset($item['title'])?$item['title']:'',
'url'=> isset($item['link'])?$item['link']:'',
'cover'=> isset($item['cover'])?$item['cover']:'',
'digest'=> isset($item['digest'])?$item['digest']:'',
'source'=> isset($item['author'])?$item['author']:'',
'date'=> isset($item['update_time'])? date('Y-m-d H:i:s',$item['update_time']):'',
);
//获取文章正文内容
if (!empty($article['url'])){
$content = getArticleContent($article['url']);
if (!empty($content)){
$article['content']=$content;
}
}
//存储文章信息
if (!empty($article)){
array_push($articles,$article);
}
}
return $articles;
}
//获取文章正文内容
function getArticleContent($url)
{
//初始化curl
$ch = curl_init();
//发送请求并获取响应数据
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
//关闭curl
curl_close($ch);
//解析响应数据并提取正文内容
preg_match('/<div class="rich_media_content " id="js_content">(.*?)<\/div>/s',$output,$matches);
return isset($matches[1])?$matches[1]:'';
}
?>
4.存储所需信息并做进一步处理
最后,我们需要将获取到的文章信息存储到数据库或文件中,并根据自己的需求进行进一步处理。这里我们可以使用php内置的mysql、sqlite等库来实现相关操作。代码如下:
php
<?php
//存储文章信息到数据库中
function saveArticleList($articles)
{
//连接数据库
$conn = mysqli_connect('localhost','root','','test');
if (!$conn){
die('Connect failed:'.mysqli_connect_error());
}
//创建表格
mysqli_query($conn,'CREATE TABLE IF NOT EXISTS articles (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), url VARCHAR(255), cover VARCHAR(255), digest TEXT, source VARCHAR(255), date DATETIME, content TEXT)');
//插入数据
foreach ($articles as $article){
$title = mysqli_real_escape_string($conn,$article['title']);
$url = mysqli_real_escape_string($conn,$article['url']);
$cover = mysqli_real_escape_string($conn,$article['cover']);
$digest = mysqli_real_escape_string($conn,$article['digest']);
$source = mysqli_real_escape_string($conn,$article['source']);
$date = mysqli_real_escape_string($conn,$article['date']);
$content = mysqli_real_escape_string($conn,$article['content']);
mysqli_query($conn,"INSERT INTO articles (title, url, cover, digest, source, date, content) VALUES ('$title','$url','$cover','$digest','$source','$date','$content')");
}
//关闭数据库连接
mysqli_close($conn);
}
?>
三、总结
本文介绍了如何使用php实现微信公众号文章内容抓取,并对其原理和实现过程进行了详细的讲解。具体而言,主要包括模拟用户登录并获取cookie信息、通过cookie信息访问特定接口并获取响应数据、解析响应数据并提取所需信息以及存储所需信息并做进一步处理等方面。相信大家通过本文的学习,可以轻松获取自己想要的微信公众号文章内容。