大黄蜂好看吗?用python分析电影观看数据

11 Jan 2019 Category: php

大黄蜂,2019-01-04 在大陆上映。观众们很期待。但是期待归期待,是否真的值得去电影院观看还是值得商榷的。本片导演 特拉维斯·奈特 主演:海莉·斯坦菲尔德,约翰·塞纳,小豪尔赫·兰登伯格 目前在猫眼电影中评分:9.20,评价人数:129402人。看数据还是值得瞧一瞧。

猫眼电影目前m端有些数据还是直接返回json数据,所以抓取还是很方便。之前看网络上有一个分析海王电影的文章,但是一直没有找到代码,所以自己写了一个。不仅仅支持一个电影,可以对猫眼电影里的所有电影进行分析,前提是能爬下来数据。实验过程中,都是爬取10个电影就无法拿到数据了。

查看更多

你所不知道的php json解析

02 Jan 2019 Category: php

json解析在php,或者说在任何编程语言中都非常常见。但是,你是否知道,json解析在php中是以扩展形式存在。

json处理,最常用的就是json_encode,json_decode。

string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )

json_encode接受三个参数,但是一般的,我们都是使用一个参数,顶多会使用第二个参数,设置中文不转义,那其他的还有什么呢。

选项 说明
JSON_FORCE_OBJECT 使一个非关联数组输出一个类(Object)而非数组。
JSON_NUMERIC_CHECK 将所有数字字符串编码成数字
JSON_UNESCAPED_UNICODE 以字面编码多字节 Unicode 字符(不使用\u形式编码)
JSON_PRETTY_PRINT 用空白字符格式化返回的数据

json_encode多个选项使用的是多个选项进行或运算得到。json_encode($value,JSON_FORCE_OBJECT|JSON_NUMERIC_CHECK|JSON_UNESCAPED_UNICODE)表示如果空的时候,返回对象。数字返回数字类型,不编码。

查看更多

windows python scrapy 安装

29 Dec 2018 Category: php

scrapy 依赖三个包,wheel,lxml,twisted。其中wheel 可以直接使用pip安装。其他两个需要vc编译工具。谁也不许因为装个10M不到的包去下好几个G的编译工具,因此需要去找编译之后的whl包,进行离线安装。

lxml.whl包比较容易找,https://pythonwheels.com/ 这个网站上能够找到。

twisted.whl 比较费劲,网上给出的地址只有这个 https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted ,但是这个下载地址已经是404了。经过多次查询,找到一个win64-py37的版本。

依赖包下载完之后,分别执行以下内容即可完成安装

pip install wheel
pip install lxml.whl
pip install twisted.whl
pip install scrapy

查看更多

shpinx的安装使用

29 Dec 2018 Category: php

Sphinx 在2018年的搜索引擎中排名第五,但它仍然是一种强大且流行的技术,在排名方面让位于Elasticsearch和Solr。 Sphinx用于如此着名的系统中 Joomla.org, CouchSurfing.org, Wikimapia.org, Tumblr.com, 优酷土豆 以及数百种其他应用。

Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒) 高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果) 高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录) 支持分布式检索 支持基于短语和基于统计的复合结果排序机制 支持任意数量的文件字段(数值属性或全文检索属性) 支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”) 支持作为Mysql的存储引擎

查看更多

用sphinx给PHP加个给力的搜索功能

28 Dec 2018 Category: php

最近工作上需要实现搜索功能,尝试了几种方案。虽然最终线上部署的还是最low的方案,但是中间的过程还是比较有意思的。业务上根据关键字查找内容。关键字的出处多来源于标题,文章描述等。主要实现方式有一些几种,各个方式各有利弊,需要权衡。

like模糊查询标题和描述,使用或条件查询

like查询估计是最常用的方式了,也是最容易实现的方式。业务代码少,逻辑清晰,准确率也高。不用其他额外操作(比如分词)。但是有个非常致命的问题,那就是效率。效率非常低,特别是在数据量大的情况。测试过程中,在224256行数据中,对3749个字进行like查询,执行总时间长达4003秒。相当于每个查询需要花费1.06秒的查询时间。

查看更多

如何给PHP添加多个错误处理函数

18 Dec 2018 Category: php

一些常规的PHP框架都会对PHP的错误、异常进行异常处理封装,方便框架日志记录,开发的时候方便处理。我们先看看几个框架错误处理:

Laravel

Laravel在app初始化的时候注册了错误处理函数,异常处理函数,异常退出处理函数,最终将错误转化成异常抛出,统一通过异常处理函数进行处理。

    public function bootstrap(Application $app)
    {
        $this->app = $app;
        error_reporting(-1);
        set_error_handler([$this, 'handleError']);
        set_exception_handler([$this, 'handleException']);
        register_shutdown_function([$this, 'handleShutdown']);
        if (! $app->environment('testing')) {
            ini_set('display_errors', 'Off');
        }
    }
    public function handleError($level, $message, $file = '', $line = 0, $context = [])
    {
        if (error_reporting() & $level) {
            throw new ErrorException($message, 0, $level, $file, $line);
        }
    }
    public function handleShutdown()
    {
        if (! is_null($error = error_get_last()) && $this->isFatal($error['type'])) {
            $this->handleException($this->fatalExceptionFromError($error, 0));
        }
    }

查看更多

ThinkCMF thinkphp5.1 个人修改版本

05 Dec 2018 Category: php

上一个项目在api上使用了thinkphp5.1,但是后台还是使用thinkcmf5.0,tp版本是5.0 .当时就想统一thinkphp版本。最近得空有时间修改,因此在ThinkCMF 5.0.180901基础上将thinkphp版本改成5.1.29 。修改后,已经对本地测试的不兼容进行修改。

ThinkCMF修改基础版本

ThinkCMF 5.0.180901 正式版

ThinkPHP版本

thinkphp5.1.29

目录结构改动

  • vendor目录移动到根目录

修改原因: \think\Loader 中注册vendor目录是写死的,没办法动态修改,除非重写Loader self::$composerPath = $rootPath . 'vendor' . DIRECTORY_SEPARATOR . 'composer' . DIRECTORY_SEPARATOR;

查看更多

PHP神奇又有用的Trait

20 Nov 2018 Category: php

php和java,c++一样都是单继承模式。但是像python,是支持多继承(即Mixin模式)。那么如何在php中实现多继承模式?这就需要使用trait。

Trait使用方式:

trait Arrayabletrait{
	public function toArray(){

	}
}

class Model{
	use Arrayabletrait;
}


$model = new Model();
$model->toArray();

Trait使用场景

  • 有些功能不需要类的方法属性,但是在不同的类都有使用需求。例如上面的对象转数组方法。 这种情况可以使用一个基类定义toArray方法,则需要将这类基础方法定义在尽可能顶层的基类当中,保证所有的类都能够调用这个方法。

  • 类因为某些需求,已经继承了第三方类对象。例如第三方orm模型类。这种情况如果要给类附加一些公共的功能,除了创建一个继承于orm模型的基类,复制一套公共功能的代码之外,就可以使用trait。

查看更多