Pegasus' Blog
保持一颗好奇心

Mac Install Python3.5

###安装
python3带来了很多新特性,甩掉了历史包袱,增加了对异步的支持,先建立环境学习下~~~
使用brew安装,再使用virtualenv建立python3.5的环境,这样不会和自带的环境冲突。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
没有brew先使用上面的ruby命令安装。

1
2
3
4
5
$ brew update
$ brew install pyenv
$ pyenv install 3.5.0
$ pyenv install 2.7.10
$ pyenv versions

ubuntu+nginx+supervisor部署tornado

记录一下最近部署tornado的过程:

###安装所需软件
使用apt-get安装nginx,redis,supervisor等需要用到的服务。
使用pip命令安装项目需要的python依赖。


###修改文件描述符数量
默认ubuntu每个进程最多打开1024个文件描述符,有时候会提示”Too many open files”的错误,需要先修改这个限制。

  1. sudo vi /etc/security/limits.conf
    在文件尾加上
1
2
* hard nofile 65535
* soft nofile 65535
  1. sudo vi /etc/pam.d/su
    将pam_limits.so这一行注释删除.

  2. sudo vi /etc/profile
    最后加上ulimit -SHn 65535
    重启后用ulimit -n查看应该已经是65535.

Python爬虫的一些总结

最近写了一些爬虫,总结下遇到过的一些问题.


###常用库:

  • 抓取网页: 常用的有requests, urllib.
  • 解析: BeautifulSoup, lxml, re.
  • 框架: scrapy, pyspier.
  • url去重: bloomfilter
  • 图片处理: Pillow
  • OCR: Google 的 OCR 开源库 tesseract,对应的Python包是pytesser.
  • 代理: 代理Tor, PySocks
  • 消息队列: rabbitmq

python多线程、异步、异步+多进程爬虫

###安装Tornado
省事点可以直接用grequests库,下面用的是tornado的异步client。
异步用到了tornado,根据官方文档的例子修改得到一个简单的异步爬虫类。可以参考下最新的文档学习下。
pip install tornado

###异步爬虫

做一个树莓派微博机器人

###准备
首先得有一个树莓派,如果你还不知道什么是树莓派,可以先去淘宝一百多淘一个,就是一个小巧的卡片电脑,可以安装linux操作系统,就用树莓派配置一个crontab定时跑就可以。如果没有的话,vps或者虚拟机都可以,不过树莓派比较方便,可以搭建一个简单的服务器没日没夜拼命地跑。机器人的话可以做微博推广,自己定制内容。比如我的叫做『老王讲段子』,每个小时自己发一个段子、搞笑图片或者无节操的gif。当然目前还不太好控制发的内容,就是有时候担心发的太没节操。冏。。。

###微博接口
建议之前先看看微博的开发者文档,了解一下一些接口的调用。不过有人已经封装了微博的python接口,直接pip install weibo就可以安装(感谢这位代码贡献者)。这里使用它继续封装成一个类,使用更加方便。

from weibo import Client

class WeiboApp(object):
    """WeiboApp client."""
    def __init__(self, api_key, api_secret, callback_url, username,
                 password, uid):
        self._c = Client(api_key, api_secret, callback_url,
                         username=username, password=password)
        self._uid = uid

    def get_show(self):
        return self._c.get('users/show', uid=self._uid)

    def post_text(self, text):
        text = text if len(text) <= 139 else text[0:139]
        self._c.post('statuses/update', status=text)

    def post_img(self, text, img_ori):
        text = text if len(text) <= 139 else text[0:139]
        self._c.post('statuses/upload', status=text, pic=img_ori)

用这个类初始化一个对象,传入你的配置就可以使用了。

Python脚本ping百度和google

web

###什么是Ping服务
ping 是基于 XML_RPC 标准协议的更新通告服务,用于Blog把内容更新快速通知给搜索引擎,以便搜索引擎及时进行抓取和更新。

计算机就相当于 RPC Client ,用于向 RPC Server 发起请求,并接受方法的执行结果。


###Python实现方法
Python 内置了 XMLRPClib ,可以很方便地处理XMLRPC协议,免去了封包解包的麻烦。

用法很简单,首先导入库:

import xmlrpclib
生成xmlrpc服务器对象:

网页静态化SEO

###为什么需要网站静态化?
对于搜索引擎而言,很多动态页面的参数机制不利于搜索引擎收录,而静态页面更容易收录。此外,页面静态化在一定程度上也提高了页面访问速度和系统性能及稳定性。以http://alpha.tech2ipo.com 网站为例子,为了搜索引擎优化,这里对每一篇文章生成静态页面。当爬虫访问网站文章的时候,实际上是转发到文章的静态页面。实现方式如下:首先使用python脚本定期生成或者更新sitemap文件,在网站后台使用ejs模板为每一篇文章生成指定格式的静态页面,最后修改nginx.conf配置文件把搜索引擎的访问转发到静态页面上去。这样就实现了爬虫访问网站文章时实际上访问的就是静态页面。下面是具体步骤:

用Python脚本生成sitemap.xml

web

项目需要用脚本生成sitemap,中间学习了一下sitemap的格式和lxml库的用法。把结果记录一下,方便以后需要直接拿来用。


###安装lxml
首先需要pip install lxml安装lxml库。
如果你在ubuntu上遇到了以下错误:

《改变心理学的40项研究》读书笔记

人的心理障碍给一个人一生的困难,远远大于一般的身体缺陷带给人的困难。 –某某。

好久没更新了,最近又看了一本心理学的书《改变心理学的40项研究》,讲了心理学史上很多重要的实验,包括人类的情绪、人格、认知等东西,还是挺有意思的。有人写了一篇读书笔记,就直接转过来了。


1879年建于德国莱比锡大学的心理学实验室标志着心理学的诞生。做为一门内容庞杂、分支众多的科学,心理学在上一个世纪蓬勃发展起来,其中,心理学研究有着举足轻重的地位和意义深远的影响。

既然是改变,顾名思义,可知此书收录的40项研究是心理学研究史上的里程碑,研究所得颠覆了当时的流行观点,对彼时思想现状提出挑战,对现象观察提供全新视角,引发革命性的新解释,并激起了新的研究浪潮和热烈争论,最终在总体上丰富了心理学领域。虽然很多研究发现在后来被证明有这样或那样的缺陷、不足与局限,但这并不会削弱它们所产生的深远影响。

除此以外,读者还能从书中受益的,是搞原创性科学研究的方法,对习惯填鸭式教育的中国读者,尤其有用。作者从介绍研究背景入手,沿着理论假设、实验设计、现象观察解释、推论判断、后续研究及推广应用逐层推进,再佐以实验涉及的道德伦理争议和参考文献,这40个研究几乎都以同样形式呈现给读者,既为门外汉启蒙,又为术业有专攻的读者提供了丰富信息,以利于其学习和掌握蕴藏其中的思路和程序。

乐观与悲观的心理学

对厄运的解释习惯和你的解释风格,不仅仅是你在失败时嘴里说出来的话。它是一种习惯性的思维方式,是你在童年期或青少年期养成的。你的解释风格表明了你是乐观还是悲观。 -塞利格曼

之前看了一本塞利格曼写的有关乐观和悲观的书,很受启发。一直都是一个有悲观倾向的人,解释风格测试显示自己是个极度悲观的人。不幸的是这种倾向有着长久的心理根源,和成长环境密切相关,想要摆脱悲观,需要分析悲观产生的来源,以及如何克服悲观心理。写下来希望可以帮助一些有悲观甚至抑郁倾向的人。


从习得性无助说起

有些人可能听过这个心理学名词:“习得性无助”是美国心理学家塞利格曼1967年在研究动物时提出的,他用狗作了一项经典实验,起初把狗关在笼子里,只要蜂音器一响,就给以难受的电击,狗关在笼子里逃避不了电击,多次实验后,蜂音器一响,在给电击前,先把笼门打开,此时狗不但不逃而是不等电击出现就先倒在地开始呻吟和颤抖,本来可以主动地逃避却绝望地等待痛苦的来临,这就是习得性无助。后来对人类的实验同样显示出习得性无助的存在。
无助感就是一种认为不论自己做什么都无法改变自己命运的想法,悲观的预言常常是自我实现的,当你认为自己无能为力的时候就放弃了各种可能,最终走向失败。不幸的是悲观思维童年时期就形成了,后来想要克服悲观的特质就需要重塑自己的思维。

实际上这还涉及到一个概念叫做『预言的自我实现』,自我预言自己无法成功然后就放弃了尝试的念头,结果真的就失败了。