convert between json and array

======make array  to json to str=======

import json
a=[1,2,3,4]
b=[5,6]
a.extend(b)
>>>a
>>>[1, 2, 3, 4, 5, 6]
!!!!a.append(b)
!!!!>>>a
!!!!>>>[1, 2, 3, 4, [5, 6]]
paws = {}
paws[‘ids’]=a
sqldata = json.JSONEncoder().encode(paws)
>>>sqldata
>>>'{“ids”: [1, 2, 3, 4, 5, 6]}’

 

=====convert str to array=====

paws = json.JSONDecoder().decode(sqldata)
>>>paws
>>>{u’ids’: [1, 2, 3, 4, 5, 6]}
>>>paws[‘ids’]
>>>[1, 2, 3, 4, 5, 6]

paws[‘latest_id’]=23123
paws[‘update_time’]=’2012-12-12 00:00:00′

Vim NerdTree-展开你的文件目录

安装NerdTree 侧边文件目录插件

NERDTree便是一款在文件系统导航的插件,该插件可从VIM或github nerdtree获取。

[cce]
cd ~/.vim/bundle 
git clone https://github.com/scrooloose/nerdtree.git
[/cce]

下载解压后其中最主要的是plugin文件夹下的NERD_tree.vim文件,将该文件拷贝到主目录下的.vim/plugin文件夹中。

注意,如果你没有bundle或者plungin目录请cd到./vim里mkdir一个

[cce]$ cp plugin/NERD_tree.vim ~/.vim/plugin/[/cce]

拷贝该插件的文档

[cce]$ cp doc/NERD_tree.txt ~/.vim/doc.[/cce]

这样插件已经安装完成,并不需要其他的配置,启动VIM的时候,默认是不会激活该插件的,如要在命令模式下键入。

[cce]: NERDTree[/cce]

操作对应的快捷方式。

o 打开关闭文件或者目录

t 在标签页中打开

T 在后台标签页中打开

! 执行此文件

p 到上层目录

P 到根目录

K 到第一个节点

J 到最后一个节点

u 打开上层目录

m 显示文件系统菜单(添加、删除、移动操作)

? 帮助

q 关闭

r 刷新窗口

:sp 分割窗口

ctrl + ww 在窗口之间切换,最有一个w可换成h, j, k, l

vim常用快捷键和简单的vim配置

工欲善其事必先利其器——从vim开始coding!(先附上一个VI的常用命令:http://www.washington.edu/computing/unix/vi.html)

对Vim的大名早就如雷贯耳,同样如雷贯耳的是vim的各种难用,更加如雷贯耳的是Vim在各种大神眼中的地位——coding神器;

这里本着最简单快速上手的原则给出一些最最有用的快捷键和编程配置,通过这些就不觉得vim有多难用了。

作为一个初学者经验是这样的,如果你有同样的症状,我要从心理上安慰你莫怕莫怕,新手都是同感:

  1. 不同于任何编辑器,其插入(输入文本)和编辑(删除,复制,粘贴,移动光标)竟然是两个模式,导致你要不停的i/o键和esc键之间切换模式,感觉异常痛苦,而且忘记切换的时候按错键还会发生各种你不知道的快捷键造成诡异的文本编辑结果。——这是正常的
  2. 感觉不能随意使用鼠标和方向键,竟然要使用诡异的hjkl来移动光标——这也是正常的,如果你用的是纯粹的vi的话。但是vim是可以支持方向键的,也可以通过配置支持鼠标,不过支持了方向键和鼠标你的双手移动范围就要增大了,这也不利于提高效率。
  3. 无法选中文本,复制粘贴都不能CTRL-C和V——这更加正常,因为vim不需要选中就能复制粘贴,更不需要CTRL-C和V两个键同时按才能复制粘贴,你原来的选中-复制-移动光标-粘贴,vim其实可以一步搞定。
  4. 删除,退格也不好用,撤销恢复也不好用——亦有同感,但是vim大神有自己的规则去干这些事。
  5. 等等一些莫名的症状。。。

我要说的是: 所谓大神,皆有大招,人世间所有的痛苦都来自不了解不熟悉。

—————

Vim最有用的快捷键:

  • 首先练习移动光标(感觉回到了dos年代的移动小海龟..)
 H、L            向前,向后
 J、K            向上,向下
 w 移动光标到下一个单词.
 b               移动光标到上一个单词.

 0 移动光标到本行最开头.
 $ 移动光标到本行结尾处.

 H               移动光标到屏幕的首行.
 M               移动光标到屏幕的中间一行.
 L               移动光标到屏幕的尾行.
 gg 移动光标到文档首行.
 G 移动光标到文档尾行.
 nG 移动光标到第n行,n是你代码的行号
 n<Enter>        向下移动n行
 n<Space>        向后移动n个字符
 c-f             (即 ctrl 键与 f 键一同按下) 本命令即 page down.
 c-b             (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.

以上真的有用,切要谙熟于心!

  • 然后是编辑文档,拷贝, 删除与粘贴,其中d是删除,y是拷贝,p是粘贴
yy 表示拷贝光标所在行.
dd 表示删除光标所在行.
p 粘贴到光标所在的下一行
dw 删除一个词
d$ 向后删除到本行的行尾
d0 向前删除到本行的行首 
dgg             向上删除直到第一行
dG              向下删除直到最后一行
dnG 删除当前行到第n行的所有内容 
yw, y$, y0, ygg, yG有着类似的性质,都表示复制;
x(X) 删除后(前)一个字符
u 撤销!!!!
  • 然后是数字命令
  5w(e)           移动光标到下五个单词.

  5yy             表示拷贝光标以下 5 行.
  5dd             表示删除光标以下 5 行.
  类似的你可以尝试加数字到很多上面的命令前;

 

  • 最后是vim的命令

set:nu                   开启行号
set:nonu              取消行号
set:diff                  比较两个文件的不同,用:vsp filename打开另一个文件

:sp                         分割窗口
:/ word                 查找word字符

:ls                           显示刚刚用过的命令;

 

Vim简单实用配置

最后的最后是vim用于代码工作的简单配置,有了这个,堪称小而轻的IDE

set number #开启行号
syntax on   #语法高亮
set autoindent   #自动缩进
set smartindent  #智能缩进
set tabstop=4   #tab为4格
set shiftwidth=4
set smarttab    #智能tab
set softtabstop=4
set showmatch  #显示自动匹配()[]{}
filetype on   #检测文件类型
set history=100   #历史记忆100个
set background=dark   #背景黑色
set ruler   #打开光标标尺
set clipboard+=unnamed   #和外界共享粘贴板内容
set autowrite   #自动保存
set cursorline  #显示光标所在行
set magic
set foldenable   #开启代码折叠
set foldlevel=4   #折叠最大4层
set foldmethod=indent  #折叠方式为缩进
set foldcolumn=0
set nocompatible   #抛弃vi
set completeopt=preview,menu
filetype plugin indent on    #根据文件类型加载插件,一下是各种代码自动补全的插件
autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
set mouse=a  #开启鼠标

 

当然vim强大到远不止这些,但是这些足够一个新手折腾了,“坚持就是胜利”,vim是最好的诠释;

——–补充——-

  • python文件好像要求tab必须是空格,请做一下设置:

:set expandtab    #写在vimrc里,这样新写的文件tab就会是4个空格
:%ret! 4                 #如果是其他编辑器已经写好的文件,则可以在vim里一键将所有tab转成空格其它相关命令:
:set tabstop=4        设定tab宽度为4个字符
:set shiftwidth=4     设定自动缩进为4个字符
:set expandtab        用space替代tab的输入
:set noexpandtab      不用space替代tab的输入

 

  • vim 查找替换

:%s/four/4/g      在所有行替换 four为4,当前行则把%去掉

 

div高度自适应,居中,背景延伸与display属性

——首先鸣谢大宝同学提供的宝贵经验

对于前端开发,关于写一个高度自适应并且居中的div应该是最最基本的需求,大部分初学者肯定会坚定不移的相信这两个属性:

height:auto;
margin:0 auto;

结果是div居中了,但是你却找不到你的div在哪?我是说如果你给div设了背景,你会发现没有看到带背景的任何东西。

网络上也有各种解决方法,第一很复杂,第二也不见得有效。这里提供一种display的属性使得div高度自动延伸。在你想高度自动延伸的div的css里加入:

height: auto;
margin:0 auto;
width: 100%;
display: inline-block;

就ok了,但是要记得增加width:100%这个属性,否则 就不居中了。。

经验之谈,方法很好用!

(2)另一种方法应该也可以:通过padding做文章

先将padding-bottom设置为最大,比如32767px,这样这个div就显示很高的背景了,在通过margin-bottom:-32767px来抵消由于padding-bottom代码的无限大高度。这样无论你有多高的div,padding里总是显示背景。

不过此方法lz没试成功。还是推荐第一种。

 

 

Linux-定时任务-自动登录-爬虫技术

  • 远程访问linux服务器: SSH

ssh -l login_name -p port 10.10.10.1
然后按要求输入你的password, 进入后和访问自己的电脑终端一样了;

  • 设定定时任务crontab -e 进入vim编写脚本
众所周知的linux系统的crontab定时任务十分优秀, 但是对于菜鸟来说很多定时的功能比如mail, wget, 执行php都用不到, 而我最想用的不过是定时访问一个网址而已, 因为一切工作都在那个网址里做了;  这源于我更习惯将更多的功能放在php里,定时只需要访问一个网页足以;查了许久最终发现两个好用的,一个适用于远程执行url,一个适合本地执行;
 当我们需要定时去调用某个本机的或者是远程的web程序时,可以这样设置crontab
0 5 * * * /usr/bin/curl   http://www.wangxianfeng.com此处  ”0 5 * * * ”  表示每天早上的5点钟定时访问上面的url 链接,将其加入到你的 crontab 替代文件中.

当我们需要定时执行某个系统内的php脚本程序时,可以这样设置crontab

* 19 * * * /usr/local/php/bin/php /var/www/test.php
此处表示调用php(因为是安装在”/usr/local/php/bin”这个目录下),每天的下午7点执行web目录下test.

(mac里的终端表示: 使用curl和php的时候可以不用加路径!!!)
  • 下面附上定时任务的参数:

crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用哪个文字编辑器.(进入后按i进入insert状态,编写后esc退出i状态,:w,:q分别表示保存和退出VI。
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当f1为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序
当f1为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行
当f1为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次
当f1为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表, 一般多用这种方式设置.

  • 其他示例:

#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date

  • curl函数:用户访问网页,自动登录,抓去数据等环节
 比如爬虫代码如下:其中from_url是目标网页,usecookie用于存储cookie

$usecookie = "cookie.txt"; //用来保持cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $from_url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close($ch);

include_once('simple_html_dom.php');//这个文件可以分析网页结构
$html = str_get_html($result);//得到具有结构的html

$html->find('table.front-table tr td.table-label-text');

如果提示说没有curl_init函数,将php.ini中;extension=php_curl.dll的;去掉。
(未完待续…)
这里是一个完整的带验证码的自动登陆加爬虫分析的实例:自动登陆+验证码+爬虫分析