快速获取公众号文章源码的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等。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线