快速获取公众号文章源码的php技巧
优采云 发布时间: 2023-04-14 08:19在如今信息爆炸的时代,我们每天都在浏览各种公众号的文章,而有时候我们需要对这些文章进行二次开发,就需要提取文章的源码。那么,php如何提取公众号文章源码呢?下面就为大家详细介绍一下。
1.获取公众号文章链接
首先,我们需要获取到要提取的公众号文章链接。方法有很多种,可以通过微信公众平台后台获取,也可以通过抓包工具获取。这里不再赘述。
2.使用curl获取页面内容
在php中,我们可以使用curl函数库来模拟浏览器请求获取页面内容。例如:
php
$url ='https://mp.weixin.qq.com/s/xxxxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER,0);
$output = curl_exec($ch);
curl_close($ch);
3.提取页面源码
获取到页面内容后,我们需要从中提取出我们需要的部分,也就是文章的源码。这里可以使用正则表达式或者DOM操作来实现。
使用正则表达式:
php
preg_match('/<div class="rich_media_content " id="js_content">(.*?)<\/div>/is',$output,$match);
$content =$match[1];
使用DOM操作:
php
$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">'.$output);
$xpath = new DOMXPath($doc);
$nodeList =$xpath->query('//div[@class="rich_media_content "]/node()');
$content ='';
foreach ($nodeList as $node){
$content .=$doc->saveHTML($node);
}
4.去除无用标签
提取出的源码中可能会包含一些我们不需要的标签,比如style、script等。可以使用正则表达式或者DOM操作来去除这些标签。
使用正则表达式:
php
$content = preg_replace('/<style.*?<\/style>/is','',$content);
$content = preg_replace('/<script.*?<\/script>/is','',$content);
使用DOM操作:
php
$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">'.$output);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//style') as $node){
$node->parentNode->removeChild($node);
}
foreach ($xpath->query('//script') as $node){
$node->parentNode->removeChild($node);
}
$content ='';
foreach ($xpath->query('//div[@class="rich_media_content "]/node()') as $node){
$content .=$doc->saveHTML($node);
}
5.替换图片地址
提取出的源码中图片地址可能是相对路径,需要替换成绝对路径。可以使用正则表达式或者DOM操作来实现。
使用正则表达式:
php
$content = preg_replace('/(src=["\'])(?!http)(.*?)(["\'])/i','$1https://mp.weixin.qq.com$2$3',$content);
使用DOM操作:
php
$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">'.$output);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//img') as $node){
$src =$node->getAttribute('src');
if (strpos($src,'http')!==0){
$node->setAttribute('src','https://mp.weixin.qq.com'.$src);
}
}
$content ='';
foreach ($xpath->query('//div[@class="rich_media_content "]/node()') as $node){
$content .=$doc->saveHTML($node);
}
6.完整代码
最终的代码如下:
php
$url ='https://mp.weixin.qq.com/s/xxxxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER,0);
$output = curl_exec($ch);
curl_close($ch);
preg_match('/<div class="rich_media_content " id="js_content">(.*?)<\/div>/is',$output,$match);
$content =$match[1];
$content = preg_replace('/<style.*?<\/style>/is','',$content);
$content = preg_replace('/<script.*?<\/script>/is','',$content);
$content = preg_replace('/(src=["\'])(?!http)(.*?)(["\'])/i','$1https://mp.weixin.qq.com$2$3',$content);
echo $content;
7.总结
通过以上步骤,我们可以轻松地提取到公众号文章的源码。当然,不同的公众号页面结构可能有所差异,需要根据实际情况进行调整。同时,我们也可以使用第三方库来实现这个功能,比如phpQuery、simple_html_dom等。