Kaito's Blog

致力成为一枚silver bullet.

0%

解析页面肯定是写爬虫遇到的最常见的工作,但不要小看这个这个过程,有时它也会令你抓狂。这次写一下关于curl工具的使用,主要介绍一下平时很常用的几项。

curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用这个工具,就能在命令行发起请求,获得响应,而且其命令简单且强大,非常适合用作写爬虫时,解析页面前的模拟工作。

基础

# 发起HTTP请求,并把返回的网页内容显示在屏幕
curl "http://www.example.com"

# 发起HTTP请求,并把返回的网页内容输出到文件
curl "http://www.example.com" > test.html

# 或者用命令-o参数也可达到同样的效果
curl -o test.html "http://www.example.com"

注意:URL地址带上双引号是比较好的习惯,防止URL中带有特殊符号,导致不能解析报错情况。

伪装头信息

有时curl直接访问页面,会得到与浏览器打开不同的结果,所以此时就要伪装头信息,来模拟浏览器的行为,这样返回的数据就跟浏览器看到的一样了。

# 使用-A参数定义User-Agent,模拟浏览器行为
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36" "http://www.example.com"

# 使用-e参数定义Referer,表示从哪个页面跳过来的,解决防盗链问题
curl -e "http://www.example.com" "http://detail.example.com"

# 或者使用-H参数自定义头信息,也可定义User-Agent、Referer、Content-Type等信息
curl -H "my-header:xxxxx" "http://www.example.com"

代理访问

或者你用程序频繁访问某个网站,结果人家把你IP封禁了,这时就可以用代理来进行访问。

# 使用-x参数使用代理访问
curl -x "123.45.67.89:8102" "http://www.example.com"
阅读全文 »

作为屌丝IT程序员,日常生活中看文档是必须的,自然看英文文档也是肯定的。但遇到不认识的单词是灰常头疼的。基于此原因,所以有了这个基于命令行快速翻译的工具。

在遇到上面说的这种情况时,解决方案:

  • 下载某软件客户端,开启划词释义功能,鼠标放倒单词上,显示词义;
  • 使用在线翻译软件,复制,粘贴,OK,明了。

我是偏向第二种方式的,因为在大多数有程序洁癖的码农来讲,装一款软件而且只用到其5%的功能不到,自己总会觉得很亏心,我也是如此,所以在线翻译便成了我的最佳选择,简单,快速,即开即用。

程序员都是喜新厌旧的,什么东西用久了,都会觉得腻,甚至会感觉效率越来越低下。在线翻译用的久了,慢慢也感觉有一些问题出现,例如:首先打开某在线翻译网站,当然,你可以保存书签,但开发过程中,浏览器开N多个标签调试是常有的事情,一不留神就会把这个翻译标签页关掉,或者说开的太多了,机器变得越来越卡,cmd + w,连续按下数十次,整个世界都清静了。

综合上述原因,所以开发了一个基于命令行的快速翻译工具,主要优点如下:

  • 平时开发都是在linux上使用vim,而且linux终端的标签开N多个也很容易切换,不会卡顿;
  • 省去了浏览器界面渲染,减少内存占用,也平复了上面所述太多网页标签抓狂的心情;
  • 键盘党都大爱终端,这样来用,可能会显的逼格很高;
阅读全文 »

最近公司办公室兴起了“键盘风”,同事一个接一个买了机械键盘,不过听着噼里啪啦的键盘声,也与程序员这个职业相符吧。这次写一下作为屌丝程序员,拥有的那些装备。

电脑

你还在用蜗牛电脑开发么?内存8G是最低配,上不封顶。有能力必须上SSD,电脑秒开或者扣盖子就走,一个月不关机无压力。当然最好还是配台Mac,不是air,是pro,自从用上Mac的触摸板,鼠标基本可以抛弃了。开发爽到爆。做开发的越早买Mac越好。如果买不起,win本的话我推荐:Thinkpad T系列,自从用了键盘中间的小红点,其他牌子的笔记本基本就不考虑了。我自己有一台Macbook Pro 13,公司配的是Thinkpad T440P

Macbook pro

阅读全文 »

起因

最近一直没有更新博客了,主要忙什么?一言难尽,相信北漂的IT屌丝们,都会遇到这个问题,那就是找房子!
房子到期,加上种种原因,决定撤离待了一年之久的小窝,不过也没什么特别值得留恋的,北漂就这样,工作、找房子、租房子。。
找了半个多月的房子,房源信息包括豆瓣、58、搜房网等,看了不下十几家房子,感想只有一个字:找合适的真特么难!不过就在昨天,终于将这件头疼的事情尘埃落定!
对于IT屌丝,当然是充分利用网络资源,但是网上例如58,赶集充斥了太多的中介信息,恶心的要命。最后在锁定在豆瓣租房小组中寻找。
但豆瓣最坑爹的是竟然没有搜索相关功能,别人发帖后,你只能用肉眼一个个寻找自己所需的信息,不能忍了。
最后决定自己写一个爬虫工具,时时监控豆瓣租房小组,抓下所有的信息,然后自己搞个页面,搜索、排序,OK,够用了!

项目

用了3个晚上的时间,写出了这个爬虫,也比较简单,主要就是配置需要抓取的页面,分析所需信息,入库等等。

然后做个前台页面,加上搜索排序等功能,齐活!

效果如下:

爬虫前台页面效果图

阅读全文 »

最近做的东西比较纯粹、直接,比如写爬虫抓数据,写程序脚本等等。但是突然接需求和与需求人沟通的时候,发现存在各种问题,导致需求延期、沟通扯皮等等问题。其中也有自身原因,也有需求人的不足。现在分析下情况,记下来,且当教训来鞭策自己吧。

需求设计缺陷

从需求人手中拿到原型,接下来肯定是技术与需求人过一下,如果有问题,尽早提出并解决。当时犯的毛病就是,没有仔细分析原型,认为到了开发时遇到问题,再沟通解决也不晚,其实不然,秉着问题越早提出越好的原则,认真分析原型,发现问题,反馈需求人是很有必要的。否则到开发时,后果小则加功能项目延期,大则项目夭折都是非常痛苦的。分析如下:

1、原型代表着需求人直接想要得到的东西;
2、原型直接关系到技术实现方面可能会遇到的问题;
3、在前两者来看,一方面是需求,一方面是实现,如果沟通不好,很容易扯皮;
4、技术角度来看,可能开发人员更熟悉其细节,要权衡利弊,提前说明可能会遇到的问题;
阅读全文 »

不用多说,常用chrome的应该有所耳闻,键盘党更是相见恨晚,vimium是一款可以用键盘来控制浏览器的插件。

vimium快捷键

j:向下细微滚动窗口   k:向上细微滚动窗口
J:下一个标签页  K:上一个标签页
d:向下滚动半个屏幕   u:向上移动半个屏幕
gg:回到顶部
G:到达页面底部
H:后退   L: 前进
f:将当前网页上的所有可见链接/输入框分配一个快捷键。F:新窗口中打开页面
g+i:定位到输入框,多个按Tab键切换
x:关闭当前页面   X:恢复刚刚关闭的页面
o:相当于地址栏,可匹配历史记录、收藏夹并在当前窗口打开,或者直接打开一个网址或者搜索一个关键字,O:新窗口中打开
g+s:查看源代码
r:重新载入当前网页
t:创建新标签
gu:跳转到父页面
yy:拷贝当前页面的URL到剪贴板
yf:拷贝某一个URL到剪贴板
H:回退上一个历史页面(相当于浏览器中的向左箭头)
L:回到下一个历史页面(相当于浏览器的向右箭头)

以上只列出了几个常用的,更多快捷键参考:https://github.com/philc/vimium/blob/master/README.md

Python HTML 导出 PDF 用到 pdfkit + wkhtmltopdf

说明:

wkhtmltopdf主要用于HTML生成PDF

pdfkit是基于wkhtmltopdf的python封装,其最终还是调用wkhtmltopdf命令

1、下载并安装:

wkhtmltox-0.12.1_linux-centos6-amd64.rpm

2、安装pdfkit:

pip install pdfkit

3、使用,参考:https://pypi.python.org/pypi/pdfkit/0.4.1

import pdfkit

pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
阅读全文 »

本文主要介绍了从最基础配置属于自己的VIM
主要分为:1、基础配置,2、插件管理。
可以参考我的vim配置

~/.vimrc基础配置

syntax on                   "语法高亮

" 加载插件
so ~/.vim/bundles.vim        在下面有说明

set fileencodings=utf-8,gbk
set backspace=indent,eol,start
set tabstop=4               "tab为4个空格
set number                  "显示行号
set hlsearch                "开启搜索高亮  
set incsearch               "输入搜索字符串的同时进行搜索  
"set ignorecase              "搜索时忽略大小写  
set ruler                   "开启光标位置提示
set cmdheight=1             "命令部分高度为1
"set autoindent              "自动缩进 
set showmatch               "显示匹配的括号 
"set smartindent             "智能缩进
set smarttab
set expandtab
set shiftwidth=4            " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4           " 使得按退格键时可以一次删掉 4 个空格
set laststatus=2            " 显示状态栏 (默认值为 1, 无法显示状态栏)

" Set leader,必须加上以下此项,后面插件会用到
let mapleader = "," 
let g:mapleader = "," 
阅读全文 »

MySQL元数据:

-- 查看可用的字符编码
SHOW character set;    |    DESC infomation_schema.character_sets;

-- 查看字符集校对规则
SHOW COLLATION LIKE 'gbk';    |    DESC infomation_schema.COLLATIONS;

-- 查看当前服务器|数据库的字符集和校对规则
SHOW variables LIKE 'character_set_server';    character_set_database
SHOW variables LIKE 'collation_server';        collation_database

-- 查看表的字符集和校对规则
SHOW CREATE TABLE test_tab;

-- 查看数据库模式
SELECT @@sql_mode;

-- 修改数据库模式
SET SESSION | GLOBAL sql_mode='STRICT_TRANS_TABLES';

-- 查看是否支持分区
SHOW VARIABLES LIKE 'partition';

分区4种类型:

- RANGE:适用于 1.需删除过期数据 2.经常查询包含分区键
- LIST:类似RANGE,枚举值列表分区
- HASH:平均分布 1.常规HASH(取模) 2.线性HASH(线性2的幂运算),只支持整型
- KEY:类似HASH,但不允许使用表达式,除整形外,支持其他类型
- COLUMNS:1. RANGE COLUMNS, 2. LIST COLUMNS
阅读全文 »