努力什么时候都不会晚,加油!
No results found
有的时候yum安装一些软件,直接404或者timeout,此时可以更改为国内的源。
阿里云Linux安装软件镜像源
阿里云是最近新出的一个镜像源。得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源。
阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/
CentOS系统更换软件安装源
第一步:备份你的原镜像文件,以免出错后可以恢复。mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 6wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
第三步:运行yum makecache生成缓存
yum clean all
yum makecache
对于全文检索,只是在刚毕业时研究过sphinx的皮毛,当时项目中选用了sphinx的中文版coreseek,感觉真心强大。而在后来的工作中,也没有再去深入的研究过,而之后看到的文章中,提到最多的只有Solr、Lucene、Elasticsearch这三个基于java的全文检索库,今天工作之余,好好研究一番。
先做了下术语调查,发现Solr与Lucene现在都是Apache基金在维护,Lucene只是一个java框架,如果想使用的话必须要使用java,在程序中集成,了解其原理,所以要求相对较高了。而Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持,它成熟稳定,还支持html、pdf、doc、xls、json、xml、csv等多种格式的索引。但其缺点也相对明显,数据量增大、搜索效率会降低,实时搜索会阻塞io,效率不高。
Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架,使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。它在全文搜索、实时搜索、分布式搜索、无缝扩展机器处理pb级别数据等方面都非常出色。因此,这里我选择研究Elasticsearch,并记录下自己的所有理解。
安装
首先从官网下载安装包:https://www.elastic.co/downloads/elasticsearch,这里我下载的是zip包,版本5.5.1。
接下来解压文件unzip elasticsearch-5.5.1.zip
接下来安装marvel插件,marvel一个管理和监控的工具,是个插件:
|
|
此时,如果想关闭监控,则可以使用以下命令:echo 'marvel.agent.enabled: false' >> ./config/elasticsearch.yml
运行
./bin/elasticsearch
此时如果只有本地访问,则可以修改配置文件 elasticsearch.yml中network.host(注意配置文件格式不是以#开头的要空一格,:后要空一格) 为network.host: 0.0.0.0
如果想在后台以守护进程模式运行,添加-d参数。
测试
执行下面的测试命令即可以看到结果curl 'http://localhost:9200/?pretty'
也可以使用下面命令来关闭它:curl -XPOST 'http://localhost:9200/_shutdown'
Elasticsearch以json结构的文档存储。Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。倒排索引 传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。
与传统关系型数据库的类比图
简单例子如下:
其中megacorp:索引名,employee:类型名;1:这个员工的ID。(另外,再put一次,则更新此文档)
获取的一条数据,保存在_source节点里GET /megacorp/employee/1
简单搜索,默认搜索结果10条,结果保存在hits数组节点里。GET /megacorp/employee/_search
查询搜索,结果也在hits数组节点里GET /megacorp/employee/_search?q=last_name:Smith
使用DSL(Domain Specific Language特定领域语言)语句查询
带过滤器的搜索
搜索短语:如果match_phrase改为match,则会搜索出包含rock或者climbing的结果
搜索结果高亮:
|
|
返回结果如下:
加上搜索语句的聚合
返回结果如下:
聚合也允许分级汇总。例如,让我们统计每种兴趣下职员的平均年龄:
返回结果如下:
接到fang88的技术考核题,要求如下:
url示例:
https://www.lennar.com/new-homes/washington/seattle
https://www.lennar.com/new-homes/texas/houston
因为经常会爬一些数据,所以大体看了一下,就一个网址,感觉应该挺简单的。
考虑到平时都用py2的scrapy来做爬虫,今天正好再熟悉下py3,也没有用bs4,因为最近发现lxml的xpath解析挺爽的
直接代码开撸,嘿嘿!
首先,根据要求,需要拿到参数,命令行如下:python3 crawl.py https://www.lennar.com/new-homes/washington/seattle
开始分析网址、抓取数据,分析网页内容,发现都是动态数据,因此选择用selenium和phantomjs来抓取
通过上述代码,很快就抓到首页要的内容,接下来准备抓分页,发现是#标签,然后用chrome来network检查元素,查看post的接口,找到相关的,但post的参数太多,所以想用之前做模拟登陆时的模拟点击来实现,代码如下:
运行调试,报错了:ElementNotVisibleException
通过报错,然后按以往的经验,加上延时,发现仍然无效,不明所以之后,尝试其他链接的模拟点击,发现可以。最后选择最原始也是最有效的调用js方法来解决。(如果有哪位高人知道原因,可以告诉我,非常感谢)
保存下网页,去查看相关的js及变量的内容。通过检查发现调用了两个接口,先做第一个接口,分析参数为页面里js的变量,于是通过js来得到:
接着通过postman来抓取的header,复制进去,并通过xpath抓取到总页数,通过requests来获取json数据
发现成功获取json结果,接着分析第二个接口,参数是第一个接口的返回部分数据,执行代码如下:
到此,所有需求的数据都可以得到了。因为只是测试,所以没有封装成类,也直接使用了postman抓到的cookie.
测试代码在github
csv中文乱码问题
今天要导出在mongo的数据,直接输入命令mongoexport -d test -c testitem --type=csv -f name,phone,tel,address -o ./test.csv
导出后直接用excel打开,发现中文全是乱码。于是google,发现用excel导入文本的方式也出错(可能是我的文件里本身数据有一些格式问题)、使用sublime另存utf-8格式也是不行。很是纠结,正准备自己写个脚本来完成的时候,找到了问题的解决方法:
命令行输入:iconv -f UTF8 -t GB18030 test.csv >test_new.csv
发现好使。
另外一种方式:直接将mac电脑上导出的test.csv发到windows上,用wps打开也是正常的,另存为xls格式,再发回mac上,用excel打开也是正常的了。
特做此备忘遇坑问题记录!!!