类unix系统上libcurl bug
超时设置小于1s时的bug
http://www.php.net/manual/zh/function.curl-setopt.php#104597
https://github.com/laruence/yar/issues/15#issuecomment-31091428
上面两个网址说的很明显,解决办法就是
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
超时设置小于1s时的bug
http://www.php.net/manual/zh/function.curl-setopt.php#104597
https://github.com/laruence/yar/issues/15#issuecomment-31091428
上面两个网址说的很明显,解决办法就是
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
small标签,word-break: break-all;
在chrome下面正常换行,而在ie下面不起作用
ie下的word-break: break-all;
貌似在block元素上才会起作用,加上display: block;
就可以了。
判断的三种方式:
//
// 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;
}
由于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()