Ms全周

Ms全周 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

Ms全周 评论了文章 · 2019-05-17

PHP 高性能 Excel 扩展 Excel-export

项目地址

https://github.com/viest/php-ext-excel-export

为什么使用 php-ext-excel-export

此处拿PHPOffice作为对比对象,使用相同的方式进行导出(逐行写入),在数据相同的情况下,PHPOffice 在2W时,因内存不够而停止了,而 php-ext-excel-export 在固定内存模式下,轻松惬意的完成了导出工作,详情对比数据看下图:

图片描述

固定内存模式

最大使用内存 = 最大单行数据量

$fileObject = $excel->constMemory('tutorial01.xlsx');

1、创建一个简单的Excel文件:

$config = ['path' => '/home/viest/'];

$excel = new \Vtiful\Kernel\Excel($config);

$excel->fileName('test.xlsx')
    ->header(['Item', 'Cost'])
    ->data([
        ['Rent', 1000],
        ['Gas',  100],
        ['Food', 300],
        ['Gym',  50],
    ])
    ->output();

2、插入图片

insertImage(int $row, int $column, string $localImagePath)
$excel = new \Vtiful\Kernel\Excel($config);

$freeFile = $excel->fileName("free.xlsx");

$freeFile->insertImage(5, 0, '/vagrant/ASW-G-66.jpg');

$freeFile->output();

3、定义一个公式

insertFormula(int $row, int $column, string $formula)
$excel = new \Vtiful\Kernel\Excel($config);

$freeFile = $excel->fileName("free.xlsx")
    ->header(['name', 'money']);

for($index = 0; $index < 10; $index++) {
    $textFile->insertText($index+1, 0, 'vikin');
    $textFile->insertText($index+1, 1, 10);
}

$textFile->insertText(12, 0, "Total");
$textFile->insertFormula(12, 1, '=SUM(B2:B11)');

$freeFile->output();

4、为单元格设置格式

$config = ['path' => './tests'];
$excel  = new \Vtiful\Kernel\Excel($config);

// 普通模式
$fileObject = $excel->fileName('tutorial01.xlsx');
// 或 固定内存模式
$fileObject = $excel->constMemory('tutorial01.xlsx');

$fileHandle = $fileObject->getHandle();

$boldStyle = \Vtiful\Kernel\Format::bold($fileHandle);

$fileObject->header(['name', 'age'])
    ->data([['viest', 21]])
    ->setColumn($boldStyle, 'A:A', 200)
    ->output();

如果你觉得不错,请star

https://github.com/viest/php-ext-excel-export

查看原文

Ms全周 赞了回答 · 2018-12-17

解决能爬取微信公众号授权么

具体场景是什么,是爬取跳转还是某个DOM?

关注 3 回答 2

Ms全周 赞了回答 · 2018-12-17

解决能爬取微信公众号授权么

具体场景是什么,是爬取跳转还是某个DOM?

关注 3 回答 2

Ms全周 提出了问题 · 2018-12-05

queryList 能不能伪造ip防止ip被封禁

queryList 能不能伪造ip防止ip被封禁,如题=。=

关注 2 回答 1

Ms全周 提出了问题 · 2018-12-04

解决能爬取微信公众号授权么

clipboard.png
进入公众号需要授权,这个可以爬取么?

关注 3 回答 2

Ms全周 评论了文章 · 2018-12-03

PHP使用QueryList采集微信文章页

采集目标

微信文章页标题、内容、发布时间、作者等信息。

采集示例URL

https://mp.weixin.qq.com/s?data-original=11&timestamp=1523173327&ver=803&signature=6PCxJ*3ojH2ZM8pm56Lquward0mQMwSkPnqCvYlrDkQmL2kAEjGcFJMj2lzvpHyuyT30lczb2Ld0npUWmp*2Gj7bPJY3SCWrpRKlXJA0p4eQWPpAzMPJVmxPcRV5TtLS&new=1

采集内容区图例

分析内容选择器

利用浏览器开发者工具来分析待采集的区域选择器,这里不做详细讲解,如有不明白请自行了解jQuery选择器和CSS选择器相关知识,如图:

分析结果:

  • 标题选择器为:.rich_media_title
  • 发布时间选择器为: #post-date
  • 作者选择器为:#meta_content>.rich_media_meta:eq(2)
  • 内容选择器为:.rich_media_content

选择器写法并不是唯一的,只要能选择到内容选择器随便怎么写都可以。

代码

选择器分析出来后代码就很容易实现了。

安装QueryList

composer require jaeger/querylist

微信采集代码

<?php

require 'vendor/autoload.php';

use QL\QueryList;

$url = 'https://mp.weixin.qq.com/s?data-original=11&timestamp=1523173327&ver=803&signature=6PCxJ*3ojH2ZM8pm56Lquward0mQMwSkPnqCvYlrDkQmL2kAEjGcFJMj2lzvpHyuyT30lczb2Ld0npUWmp*2Gj7bPJY3SCWrpRKlXJA0p4eQWPpAzMPJVmxPcRV5TtLS&new=1';

// 采集规则
$rules = [
    'title' => ['.rich_media_title','text'],
    'date' => ['#post-date','text'],
    'author' => ['#meta_content>.rich_media_meta:eq(2)','text'],
    'content' => ['.rich_media_content','html']
];

$data = QueryList::get($url)->rules($rules)->query()->getData();

print_r($data->all());

可以很轻松的就写出采集代码出来,来看看运行结果:

Array
(
    [0] => Array
        (
            [title] => “贸易战”战火尚未燃起,特朗普已被各大媒体炮轰丨外媒说
            [date] => 2018-04-08
            [author] => 双语君
            [content] => <section class="xmteditor" style="display:none;" data-tools="新媒体管家" data-label="powered by xmt.cn"></section><p style="white-space: normal;"><img class="" data-ratio="0.134375" data-s="300,640" data-data-original="https://mmbiz.qpic.cn/mmbiz_png/IqicDAGdXNibs5wrrbmbVJW8HZB9Qv5ajtuR4C4kIQI43GjtM0ZDsDWzFSCZ7UcthQ1bbPqBSENxEdvRyzzaBavg/640?wx_fmt=png" data-type="png" data-w="640" style="color: rgb(62, 62, 62);text-align: justify;line-height: 28.4444px;background-color: rgb(255, 255, 255);box-sizing: border-box !important;word-wrap: break-word !important;visibility: visible !important;width: auto !important;" width="auto"></p>
<p style="white-space: normal;"><br></p>
<p style="white-space: normal;"><span style="font-size: 15px;">自特朗普挑起“贸易战”以来,一把利剑就悬在全球市场的头上。</span></p>
<p style="white-space: normal;"><br></p>
<p style="white-space: normal;"><span style="font-size: 15px;">中美两国公布的征税商品规模越变越大,股市震荡,世界经济的不确定性与日俱增。</span></p>
<p style="white-space: normal;"><br></p>
......
)

和预期一样正确采集到了内容,但是内容乱码了。

解决乱码

解决乱码的方法有很多,QueryList内置的解决方案是使用encoding()removeHead()这个方法,但经过尝试发现目前的场景都没有效果,所以我使用了另一种方法来解决微信乱码问题,修改后的代码如下:

<?php

require 'vendor/autoload.php';

use Jaeger\GHttp;
use QL\QueryList;

$url = 'https://mp.weixin.qq.com/s?data-original=11&timestamp=1523173327&ver=803&signature=6PCxJ*3ojH2ZM8pm56Lquward0mQMwSkPnqCvYlrDkQmL2kAEjGcFJMj2lzvpHyuyT30lczb2Ld0npUWmp*2Gj7bPJY3SCWrpRKlXJA0p4eQWPpAzMPJVmxPcRV5TtLS&new=1';

// 采集规则
$rules = [
    'title' => ['.rich_media_title','text'],
    'date' => ['#post-date','text'],
    'author' => ['#meta_content>.rich_media_meta:eq(2)','text'],
    'content' => ['.rich_media_content','html']
];

$html = GHttp::get($url);
// 直接匹配出body中的内容
preg_match('/<body[^>]+>(.+)\s+<\/body>/s',$html,$arr);
$html = $arr[0];

$data = QueryList::html($html)->rules($rules)->query()->getData();

print_r($data->all());

运行结果:

Array
(
    [0] => Array
        (
            [title] => “贸易战”战火尚未燃起,特朗普已被各大媒体炮轰丨外媒说
            [date] => 2018-04-08
            [author] => 双语君
            [content] => <section class="xmteditor" style="display:none;" data-tools="新媒体管家" data-label="powered by xmt.cn"></section><p style="white-space: normal;"><img class="" data-ratio="0.134375" data-s="300,640" data-data-original="https://mmbiz.qpic.cn/mmbiz_png/IqicDAGdXNibs5wrrbmbVJW8HZB9Qv5ajtuR4C4kIQI43GjtM0ZDsDWzFSCZ7UcthQ1bbPqBSENxEdvRyzzaBavg/640?wx_fmt=png" data-type="png" data-w="640" style="color: rgb(62, 62, 62);text-align: justify;line-height: 28.4444px;background-color: rgb(255, 255, 255);box-sizing: border-box !important;word-wrap: break-word !important;visibility: visible !important;width: auto !important;" width="auto"></p>
<p style="white-space: normal;"><br></p>
<p style="white-space: normal;"><span style="font-size: 15px;">自特朗普挑起“贸易战”以来,一把利剑就悬在全球市场的头上。</span></p>
<p style="white-space: normal;"><br></p>
<p style="white-space: normal;"><span style="font-size: 15px;">中美两国公布的征税商品规模越变越大,股市震荡,世界经济的不确定性与日俱增。</span></p>
<p style="white-space: normal;"><br></p>
....
)
原文:http://study.querylist.cc/arc...
查看原文

Ms全周 提出了问题 · 2018-12-03

抓取https报错,是php版本的原因吗

clipboard.png

关注 4 回答 3

认证与成就

  • 获得 0 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2018-12-03
个人主页被 235 人浏览