2013年12月

ie文字强制换行

现象

small标签,word-break: break-all; 在chrome下面正常换行,而在ie下面不起作用

解决

ie下的word-break: break-all; 貌似在block元素上才会起作用,加上display: block; 就可以了。

object-c in_array

判断的三种方式:

//
//  main.m
//  learning
//
//  Created by xiaozi on 13-12-8.
//  Copyright (c) 2013年 xiaozi. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        NSString* extsStr = @"php,js,py";
        NSArray* extsArr = [extsStr componentsSeparatedByString:@","];
        
        // 是否在数组中 {{{
        NSPredicate* rule1 = [NSPredicate predicateWithFormat:@"SELF IN %@", extsArr];
        BOOL result1 = [rule1 evaluateWithObject:@"txt"];
        NSLog(@"%d", result1);
        // }}}
        
        // {{{
        NSPredicate* rule2 = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", @"js"];
        
        // 数组包含
        BOOL result2 = [rule2 evaluateWithObject:extsArr];
        NSLog(@"%d", result2);
        // }}}
        
        // 数组过滤
        BOOL result3 = [[extsArr filteredArrayUsingPredicate:rule2] count];
        NSLog(@"%d", result3);
        
    }
    return 0;
}

python抓取taobao ip数据库

准备

由于taobao提供了rest api,所以这次就不用scrapy了,改用unirest

pip install unirest

代码

unirest是异步请求的(多线程),所以提供一个callback,但是要是有额外的参数需要传入,用全局变量的话会产生问题。

具体的实现可以根据纯真IP数据库的IP段来查询,单台机器抓取的话估计2~3天的样子,下面是单个IP段抓取的实现代码:

# encoding: utf-8
import time, unirest

def pp(extra):
    # 其实这种做法和js很像,用一个闭包限制变量的作用域
    def p(resp):
        print(extra)
        # 在这里做数据的处理和储存
    return p

def main():
    r = ['192.9.201.0', '192.9.201.255'];
    unirest.get('http://ip.taobao.com/service/getIpInfo.php', headers = {}, params = {'ip': r[0]}, auth = (), callback = pp(r))
    # taobao访问限制:为了保障服务正常运行,每个用户的访问频率需小于10qps。
    time.sleep(.5)

if __name__ == '__main__':
    main()