有的时候做用户cookie之类的清洗,设计到来源ip,如果埋点数据里没用城市的属性,只有一堆ip地址,这个时候就想根据ip出归属地。

网上提供很多查询ip的网站,因此我们可以写一个爬虫,逐行把ip拼接到url,像服务器提交,然后获取json字符串,再对json清洗。但这样面临一个问题,提供ip库的网站,大多做了反爬措施,而我们的ip地址有比较多的时候,比如十万级,百万级,肯定会被拦截。因此,如果用爬虫的思路,就要把一个简单的urllib的简单爬虫变成一个加随机useragent,加随机ip,加时间延迟。用户代理,增加开发工作量,ip成本太高,延迟影响效率。所以这里提供两种方案。1.爬虫获取

简单一点说就是让程序模仿人去ip网站查询。

import json

from urllib import request

import sys

data = open('ip.txt')

url = r'http://www.lagou.com/zhaopin/Python/?labelWords=label'

def get_data(ip):

API = "http://ip.taobao.com/service/getIpInfo.php?ip="

url = API + ip

headers = {

'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',

'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',

'Connection': 'keep-alive'

}

req = request.Request(url, headers=headers)

page = request.urlopen(req)

jsondata = json.load(page)

if jsondata['code'] == 1:

print("No %s info." % ip)

exit(1)

else:

return jsondata

def process_data(jsondata):

if jsondata['data']['country']:

country = jsondata['data']['country']

else:

country = "NULL"

if jsondata['data']['area']:

area = jsondata['data']['area']

else:

area = "NULL"

if jsondata['data']['region']:

region = jsondata['data']['region']

else:

region = "NULL"

if jsondata['data']['city']:

city = jsondata['data']['city']

else:

city = "NULL"

if jsondata['data']['county']:

county = jsondata['data']['county']

else:

county = "NULL"

if jsondata['data']['isp']:

isp= jsondata['data']['isp']

else:

isp = "NULL"

return (country, area, region, city, county, isp)

def output_data(data):

ret = "%-4s\t%-4s\t%-4s\t%-4s\t%-4s\t%-4s\n" % ("country", "area", "region", "city", "county", "isp")

ret += "%-4s\t%-4s\t%-4s\t%-4s\t%-4s\t%-4s" % data

print(ret)

return(ret)

import time

data1 = data.readlines()

ipresult = open('jieguo.txt','w')

for i in data1:

ret = get_data(i)

time.sleep(10)

result = process_data(ret)

ipdata = output_data(result)

ipresult.write(ipdata+'\n')

ipresult.close()

'''

data1 = data.readlines()

ipresult = open('jieguo.txt','w')

ret = get_data(data1[1])

result = process_data(ret)

ipdata = output_data(result)

ipresult.write(ipdata+'\n')

ipresult.close()

'''

该接口有问题,即使是正常浏览器点击,第一次请求很正常,后面的请求,会返回502或者404,暂时没有找到规律,我设置程序沉睡10秒,大概能爬十几个,后面就会报错

2.利用本地ip库文件离线查(纯真ip)

这是个python的开源工具qqwry,由两部分组成。一个python包,一个是*.dat的离线ip文件库,可百度下载,由网友不断整理,不断更新。

https://github.com/animalize/qqwry-python3​github.com

这是github的开源地址。

用了这个之后是真的爽,两三行代码就解决问题,而且速度快,就是飞一样的感觉。

from qqwry import QQwry

q = QQwry()

q.load_file('E:\data\programfile\qqwry-python3-master\qqwry.dat')

data = open('IP1.txt')

data1 = data.readlines()

ipresult = open('jieguo.txt','w')

for i in data1:

result = q.lookup(i.strip())

city = result[0]

typenet = result[1]

ipresult.write(i.strip()+'\t' + city + '\t' + typenet + '\n')

ipresult.close()

python批量查询ip归属地_python 实现批量查询ip的归属城市相关推荐

  1. python批量查询ip归属地_python3.2批量查询IP地址区域

    import urllib.request #jk409  2014-7-31 by python3.4编写用于[批量]查询IP地址国家区域 def chaxun(ip_addr): ip_addr2 ...

  2. python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例

    从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾.SAb免费资源网 import requests import json import xlrd from ...

  3. python自动获取号码归属地_Nemo_Python:批量获取并保存手机号的归属地和运营商_Nemo社区_LinkNemo_关于分享和探索的好地方...

    从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾. import requests import json import xlrd from xlutils. ...

  4. python批量下载网页文件夹_Python实现批量从不同的Linux服务器下载文件

    基于Python实现批量从不同的Linux服务器下载文件 by:授客 实现功能 批量从不同的Linux服务器下载指定文件 测试环境 Win7 64位 Python 3.3.2 pscp 64位 下载地 ...

  5. python 数据库查询结果邮件提醒_Python实现的查询mysql数据库并通过邮件发送信息功能...

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: ...

  6. 用python数据分析excel多地天气_Python实现天气查询功能(外加Excel技巧)

    昨天在网上发现了一个非常方便的天气API,就用Python试着用了一下.参数是挺少的,用起来也方便,但是那个城市代码确实是搞了我好长时间. 一.介绍 我们先来看一下实现的程序有什么功能: 功能也是非常 ...

  7. python如何替换文件部分内容_python 实现批量替换文本中的某部分内容

    一.介绍 在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件中特定部分的内容. 二.代码实现 import re import o ...

  8. python识别火车票二维码_Python 实现火车票查询工具

    一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你 ...

  9. python自动下载qq文件夹_Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  10. python定时导出已发送文件_Python链接数据库查询导出查询结果到Excel并定时发送邮件到指定邮箱,实现巡检功能(亲测可用!!!)...

    #python版本3.7 # -*- coding: utf-8 -*- """ Created on Wed Aug 1 11:35:17 2018 @author: ...

最新文章

  1. esp32 蓝牙启动流程_TWS真无线蓝牙耳机多功能测试设备
  2. BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
  3. 通过 .htaccess 实现缓存策略
  4. CoreJava 笔记总结-第九章 集合
  5. python定时器 循环_python从写定时器学习Thread
  6. 100人每人100元每次一人分1元给另一人问题matalb 求解
  7. “要么你去驾驭生命,要么生命驾驭你。你的心态决定谁是坐骑,谁是骑师。”...
  8. Golang实践录:工程管理
  9. 用linux集成电路版图设计,集成电路版图设计项目化教程(第2版)
  10. setValue:forKey of nsobject
  11. 【leetcode】二叉树(python)
  12. WSL:vi 的使用、只读下的修改操作
  13. 机器学习建模的问题大全
  14. 人与人之间的交往艺术
  15. VMware Fusion for mac虚拟机中Linux系统并使用ssh连接
  16. 输入某年某月某日,判断这一天是这一年的第几天?(JS实现)
  17. C#迭代器的详细用法
  18. C++20 barrier
  19. 阿里云服务器配置参数详细说明文档
  20. 计算机打开服务的命令行,Win7使用命令行启动和停止Windows服务程序技巧

热门文章

  1. delphi android 串口通信,Delphi 7:操作串口(ComPort)
  2. 锐捷客户端在Linux下的使用。
  3. Python全栈开发【基础-11】基本数据类型内置方法
  4. 2018年4月23日无聊写个博客玩。收集关于Unity圣典中的Rigidbody中的各个组件的应用方法。写的不好等以后的我来嘲笑现在的我
  5. Web前端学习 | Ajax
  6. 音频文件--PCM、 WAV、 MP3及AMR格式分析
  7. elipse下载安装教程
  8. 使用Python采集淘宝类目数据并进行数据分析
  9. Python安装包时出现的问题及解决方案
  10. selenium IDE Chrome下载安装与使用