python的requests去除掉ssl的warning

requests访问https网站的时候,如果证书出现问题,会raise出来异常。

其实,做爬虫的,还在乎啥证书,安不安全呗。

一般,会在requests的getorpost方法里面加入:

1
verify=False

形如:

1
resp = requests.post("https://media.jd.com/getAdvcode/1",data=data,verify=False)

不过,这样就意味着requests可能会出现warning。

1
connectionpool.py:730: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html (This warning will only appear once by default.)

warning 是意外的日志数据,多了很讨厌。

利用下面的方法关闭:

1
2
3
4
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

PS:这种情况一般是探测到了中间人攻击。如果使用动态代理,出现类似warning的时候,最好去掉这个代理(他在抓你的https数据)

Chrome的Cookie导出扩展

这个导出cookie还是蛮好用的。

和python配合,需要到处LWP 类型的Cookie,然后python使用cookielib库。

1
2
3
4
5
6
7
8
9
import cookielib
import requests
r = requests.Session()
r.cookies = cookielib.LWPCookieJar("cookies")
r.cookies.load(ignore_discard=True)
r.headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"
}

cookies,要符合cookielib的模式。这里,貌似有个字符串规则。

1
2
3
4
5
6
def _really_load(self, f, filename, ignore_discard, ignore_expires):
magic = f.readline()
if not re.search(self.magic_re, magic):
msg = ("%r does not look like a Set-Cookie3 (LWP) format "
"file" % filename)
raise LoadError(msg)

magic_re的规则是:

1
magic_re = r"^\#LWP-Cookies-(\d+\.\d+)"

也就是说,cookie文件的格式,第一行需要是这样的:

1
#LWP-Cookies-2.0

老实说,比较烂。用editthiscookie导出后,要修改头一下。

pycharm 2016的远程调试方法

PyCharm很好用。目前版本是2016版。

不过,我们日常很多时候是在本地开发然后部署到服务器上,这样中间涉及到了:

  • 操作系统更改
  • 工作目录变更
  • 相对路径变更
  • 依赖库变更

就像我,经常需要在windows下开发然后再centos上部署。每次都需要重新跑一次单元测试,还经常发现问题。

用同环境的测试服务器上开发,然后部署的时候,会简单很多。

这就是涉及到了PyCharm远程调试。

继续阅读···

无头浏览器phantomjs

所谓的无头浏览器(headless)就是指不带界面,完全可以命令行or脚本控制的浏览器。

phantomjs 就是比较流行的无头浏览器。

  • 基于webkit
  • 可以解析流行网页内的js脚本。
  • 可以把网页后台渲染成图片
  • 可以通过脚本扩展功能,这点在采集/自动化测试内很有用。

缺点也有,和普通的基于页面分析的采集来比较,这个phantomjs重了很多。

官网:http://phantomjs.org/

使用教程:http://phantomjs.org/documentation/

例子:http://phantomjs.org/examples/

继续阅读···

Hexo新建文章增添默认categories属性

一般来说,hexo增添文章使用如下命令:

1
$hexo new "文章名称"

生成的文件大概是这样的德行:

1
2
3
4
5
---
title: 文章名称
date: 2016-12-01 10:29:42
tags:
---

不过,实际上的blog一般都会设置不少分类,也就是categories 。 用默认的方法后,每次必须手动补足一下:

1
2
3
4
5
6
---
title: 文章名称
date: 2016-12-01 10:29:42
tags:
categories: [xxxx]
---

这个实际上是可以通过修改:myblog\scaffolds\post.md 来实现。

诸如,修改成这个德行:

1
2
3
4
5
6
---
title: {{ title }}
date: {{ date }}
tags:
categories: [分享]
---

那么,每次你hexo new "article"的时候,categories就会自动添加进来了。

找打的网站--帮你百度一下

这是个比较搞笑的网站,相当找打。

设想个应用场景:

A:今年春节放假是怎么放啊?

B:等等,我给你说

……(2分钟后)

看看那傲娇的旁白提示,倘若你真发给妹子作为回答,活该孤独一生~~~

链接补充一下:帮你百度一下

Python 奇技淫巧

  • 数组降维

    1
    2
    3
    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    [k for i in matrix for k in i]
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 矩阵行列互转

    1
    2
    3
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    re_a = list(zip(*a))
    >>> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  • 字典的键、值互换

    1
    2
    3
    4
    5
    6
    a = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    def reverse_dict(a):
    k = a.keys()
    v = a.values()
    new_dict = dict(zip(v, k))
    return new_dict
  • 合并一个list的相邻项

    1
    2
    3
    a = [1, 2, 3, 4, 5, 6]
    list(zip( a[::2], a[1::2] ))
    >>> [(1, 2), (3, 4), (5, 6)]
  • 反转字符串

    1
    2
    3
    a = 'python'
    a[::-1]
    >>> 'nohtyp'
  • 统计list中1的个数

1
2
3
a = [0, 1, 0, 0, 1, 0, 1, 0]
[i[0] for i in enumerate(a) if i[1] != 0]
>>>[1, 4, 6]

Sublime Text的多行列操作

Sublime Text是个非常好用的文本编辑器。操作如丝般顺滑,功能强大,速度飞快。

这里是Sublime Text的一个简单操作。适用Sublime Text2/3

如题:

1
2
3
4
5
6
7
8
9
10
{ img="xpk(main:image/face/f000.png)", code="呲牙" };
{ img="xpk(main:image/face/f001.png)", code="调皮" };
{ img="xpk(main:image/face/f002.png)", code="流汗" };
{ img="xpk(main:image/face/f003.png)", code="偷笑" };
{ img="xpk(main:image/face/f004.png)", code="再见" };
{ img="xpk(main:image/face/f005.png)", code="敲打" };
{ img="xpk(main:image/face/f006.png)", code="擦汗" };
{ img="xpk(main:image/face/f007.png)", code="猪头" };
{ img="xpk(main:image/face/f008.png)", code="玫瑰" };
{ img="xpk(main:image/face/f009.png)", code="流泪" };

这么一段代码,我想保留一个基本的对应表,形如:f008–玫瑰 。

Sublime可以优雅的解决这个。

  1. Ctrl+A 全选

  2. Ctrl+Shift+L 多行操作

  3. 左右移动,和操作一行一样的同时操作多行。当然,记得活用home end按钮。

Python的组合生成器

在python中,迭代器工具集合里面有一个比较好用的排列组合命令集合。

  • product 笛卡尔积
  • permutations 排列
  • combinations 组合,没有重复
  • combinations_with_replacement 组合,有重复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> import itertools
>>> for i in itertools.product('ABCD', repeat = 2):
... print i,
...
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')
>>> for i in itertools.permutations('ABCD', 2):
... print i,
...
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C')
>>> for i in itertools.combinations('ABCD', 2):
... print i,
...
('A', 'B') ('A', 'C') ('A', 'D') ('B', 'C') ('B', 'D') ('C', 'D')
>>> for i in itertools.combinations_with_replacement('ABCD', 2):
... print i,
...
('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'C') ('C', 'D') ('D', 'D')

OneNote操作API接口

前言

OneNote是很好用的资料整理、撰写文章笔记的工具。

有很多时候,从晚上看到的比较好的资料都可以随手整理进去。

不过,全部手动是比较麻烦的,诸如知乎收藏夹之类的文章,平时点击了收藏后,如果不及时保存,有时候会被编辑掉,好文章变成无法访问,还是很郁闷的。

好在微软提供了office的开发接口,其中包含了OneNote。通过这些接口,可以将数据通过程序提交到Onenote中,增加分类、增删文章等等。

在阅读前,请熟读微软MSDN中的相关章节:

本文只是对以上文档的简单归纳汇总。

继续阅读···

Windows7/10 修改用户主目录

Windows重装的时候,%User%目录总是会被清空。每次备份很麻烦的。

这里就是简单的将%User%目录保存在D盘,然后做一个软连接链接到C盘下。

从此,重做系统就方便很多了。

  • 新做系统:

    在安装Windows7的过程中,要求输入用户名及密码的时候,先不如输入任何信息,按“Shift+F10”呼出DOS窗口,输入以下命令:

    1
    2
    3
    4
    5
    robocopy "C:\Users" "D:\Users"/E /COPYALL /XJ
    rmdir "C:\Users" /S /Q
    mklink /J "C:\Users" "D:\Users"
  • 已经存在的系统

  1. 关闭所有应用程序;

  2. 按一下“Windows”键,输入“计算机管理”之后按“Enter”,呼出“计算机管理器”;

  3. 鼠标点击“Administrator”,选择属性,而后在随后的对话框中去掉“帐户已禁用”之前的勾,而后关闭“计算机管理器”;

  4. 注销当前用户(注意,不是“切换用户”),而后以“Administrator”登录

  5. 打开命令行窗口,输入以下命令:

    1
    robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ /XD "C:\Users\Administrator"
  6. 注销Administrator,重新用你的用户名登录Windows7,而后到“计算机管理器”里禁用Administrator;

  7. 以管理员身份打开一个DOS窗口,输入以下命令:

    1
    2
    rmdir "C:\Users" /S /Q
    mklink /J "C:\Users" "D:\Users"

切记C/D盘都得需要NTFS分区

Python 的常用 random 函数用法

  • 使用python random模块的choice方法随机选择某个元素
1
2
3
foo = ['a', 'b','c', 'd', 'e']
slice = random.choice(foo)
print slice
  • 使用python random模块的sample函数从列表中随机选择一组元素
1
2
3
foo =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10
slice = random.sample(foo, 5#从list中随机获取5个元素,作为一个片断返回 
print slice
  • 使用python random模块的shuffle函数将列表重新排序
1
2
3
4
foo = [1, 2, 3, 4, 5, 6, 7]
slice = random.shuffle(foo) #洗牌
print slice
[7, 3, 2, 5, 6, 4, 1]