def fetch(ip):
    url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
    result = []
    try:
        response = urllib.urlopen(url).read()
        jsondata = json.loads(response)
        if jsondata[u'code'] == 0:
            result.append(jsondata[u'data'][u'ip'].encode('utf-8'))            
            result.append(jsondata[u'data'][u'country'].encode('utf-8'))
            result.append(jsondata[u'data'][u'country_id'].encode('utf-8'))
            result.append(jsondata[u'data'][u'area'].encode('utf-8'))
            result.append(jsondata[u'data'][u'area_id'].encode('utf-8'))
            result.append(jsondata[u'data'][u'region'].encode('utf-8'))
            result.append(jsondata[u'data'][u'region_id'].encode('utf-8'))
            result.append(jsondata[u'data'][u'city'].encode('utf-8'))
            result.append(jsondata[u'data'][u'city_id'].encode('utf-8'))
            result.append(jsondata[u'data'][u'county'].encode('utf-8'))
            result.append(jsondata[u'data'][u'county_id'].encode('utf-8'))
            result.append(jsondata[u'data'][u'isp'].encode('utf-8'))
            result.append(jsondata[u'data'][u'isp_id'].encode('utf-8'))            
        else:
            return 0, result
    except:
        logging.exception("Url open failed:" + url)
        return 0, result
    return 1, result

def worker(ratelimit, jobs, results, progress):
    global cancel
    while not cancel:
        try:
            ratelimit.ratecontrol()
            ip = jobs.get(timeout=2) # Wait 2 seconds
            ok, result = fetch(ip)
            if not ok:
                logging.error("Fetch information failed, ip:{}".format(ip))
                progress.put("") # Notify the progress even it failed
            elif result is not None:
                results.put(" ".join(result))
            jobs.task_done()    # Notify one item
        except Queue.Empty:
            pass
        except:
            logging.exception("Unknown Error!")


标签:

Python抓取淘宝IP地址数据的更多相关文章

  1. Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤

    思路:使用Python爬虫对腾讯疫情网站世界疫情数据进行爬取,封装成一个函数返回一个 字典数据格式的对象,写另一个方法调用该函数接收返回值,和数据库取得连接后把 数据存储到mysql数据库。一、mysql数据库建表CREATE TABLE world(id INT(11) N......

  2. Python 日志打印之logging.getLogger源码分析

    日志打印之logging.getLogger源码分析日志打印之logging.getLogger源码分析By:授客 QQ:1033553122 #实践环境WIN 10Python 3.6.5#函数说明logging.getLogger(name=None)getLogger函数位于logging/_......

  3. 利用Python函数实现一个万历表完整示例

    前言大家可以根据格式化打印字符去调一下最后的输出,不过有中文好像不好调整,可以换成星期的单词,这样应该会好一点,format()函数可以用来格式化打印字符,format()可以使用字符串去调用,也可以独自使用。可以点进格式化打印字符了解一下哦示例代码# 判断是否闰年def isleap(year):......

  4. python中yield的用法详解

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受。接下来是正题:首先,如果你还没有对yield有个初步分认识,那么......

  5. Python列表推导式玩法

    前言列表做为python的基础,是必须学习的语法之一。一些基础的之前已经是反复温习和使用了,今天我们来学习它的进阶版--》列表推导式。列表推导式:优点:是将所有的值一次性加载到内存中,相比于for循环生成的列表执行速度快,并且语法精简,一行代码就完成for循环多行代码所要完成的事情。缺点:代码的可阅......

  6. Python利用socket模块开发简单的端口扫描工具的实现

    一、socket1.简介Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。socket的工作流程socket 采用C/S 模式,分为服务端和客户端服务端数据处理流程创建socket ......

  7. python常见题型

    语言特性1. 谈谈对 Python 和其他语言的区别2. 简述解释型和编译型编程语言3. Python 的解释器种类以及相关特点?4. Python3 和 Python2 的区别?5. Python3 和 Python2 中 int 和 long 区别?6. xrange 和 range 的区别?编......

  8. [Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理

    如何使用pandas模块中的函数对DataFrame中的数据进行查找和替换目录1. 数据文件2. 读数据3. 查找数据4. 替换数据4.1 一对一替换4.2 多对一替换4.3 多对多替换5. 插入数据6. 删除数据6.1 删除列6.2 删除行7. 处理缺失值7.1 数据准备7.2 查看缺失值7.3 ......

  9. Python 学习笔记(1)

    Mac下载安装Pythonmac 系统自带有python 。但就最新的mac系统而言,它自带的python版本为2.*版本。虽然不影响对于老python项目的运行,但3.*版本中很多语法都发生了改变,为了方便后面的学习和使用还是最新版本会好一点1. 查看mac系统自带的pythonmac自带pyth......

  10. Python骚操作从列表推导和生成器表达式开始

    序列序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列。容器序列与扁平序列容器序列存放的是对象的引用,包括list、tuple、collections.deque。扁平序列存放的是对象的值,包括str、bytes、bytearray、memoryview和arr......

随机推荐

  1. 详解MySQL与Spring的自动提交(autocommit)

    1 MySQL的autocommit设置MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交。如果修改为关闭状态,则执行DML语句之后要手动提交 才能生效。查询当前会话的自动提交是否开启:mysql> show variables like 'aut......

  2. 这么优雅的Java ORM没见过吧

    Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。一、ORM示例1. Insertpublic CompletableFuture insert() {var obj = new sys.en......

  3. 使用V8和node轻松profile分析nodejs应用程序

    目录简介使用V8的内置profiler工具使用gm来build V8手动build V8生成profile文件分析生成的文件生成时间线图使用nodejs的profile工具简介我们使用nodejs写好了程序之后,要是想对该程序进行性能分析的话,就需要用到profile工具了。虽然有很多很方便和强大的......

  4. 如何在vue中使用HTML 5 拖放API

    拖放 API 将可拖动元素添加到 HTML,使我们可以构建包含可以拖动的具有丰富 UI 元素的 Web 应用。在本文中我们将用 Vue.js 构建一个简单的看板应用。看板是一种项目管理工具,使用户可以从头到尾直观地管理项目。 Trello、Pivotal Tracker 和 Jira 等工具都属于看......

  5. asp(vbscript)中自定义函数的默认参数实现代码

    现代语言的函数中都可以带有默认参数,在vbscript系统内建的函数可以带有可选值(如常用的 split()等等),然而我们自己定义的函数中无法具有此功能.下面提供一个方法实现可选参数的功能.functin foo(dtype, dsize, value) dim a......

  6. R语言求一行(列表、list)数据的平均数操作

    R语言求一个列表的平均数可以使用mean() :mean英文意思有平均数的含义x=c(1,3,5,7,9)max(x)#这样即可求得平均数为 : 5假如读取过一个csv文件之后,要求其中一行数据中指定某个区间内的平均数可以使用rowMeans()data = read.csv(“input.csv&......

  7. Java 使用拦截器无限转发/重定向无限循环/重定向次数过多报错(StackOverflowError) 解决方案

    说明:当使用拦截器出现“请求转发”无限循环或者“重定向”次数过多这种问题的时候,一般都是 拦截器 设置错了情况一:请求转发时没有配置排除拦截路径,就是说你访问的路径都拦截了,导致一直转发,从而产生java.lang.StackOverflowError错误情况二:重定向时没有配置排除拦截路径,会导致......

  8. php中PHPUnit框架实例用法

    本期给大家带来的框架是一个单元测试内容,本身不是很难的东西,大家觉得困难,可能是把自己框在了技术上,事实上,并非如此,我们没有设置好一个项目,不一定是自己的技术不达标,更多可能也许是对一个项目时间的安排的衡量和考虑并不全面,下面就大家遇到的一些问题,给大家编写以下内容,供大家参考。安装:compos......

  9. 前后端(PHP)使用AES对称加密

    前端代码:// 这个是加密用的 function encrypt(text){ var key = CryptoJS.enc.Utf8.parse('1234567890654321'); //为了避免补位,直接用16位的秘钥 var iv = CryptoJS.enc.Utf8.parse('12......

  10. MyBatis中的表关联查询实现示例

    Mybatis中的一对多对象关联查询查询模拟情景,商品与商品详情:一件商品可以对应多个商品详情信息,即从商品?商品详情方向看,属于一对多。 在一对多关系中,需要在属于一的一方的实体类中添加多的一方的集合,一般为List<>类型//(省去了get和set的方法)public class G......