python批量查询ip归属地_python 实现批量查询ip的归属城市
有的时候做用户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-python3github.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的归属城市相关推荐
- python批量查询ip归属地_python3.2批量查询IP地址区域
import urllib.request #jk409 2014-7-31 by python3.4编写用于[批量]查询IP地址国家区域 def chaxun(ip_addr): ip_addr2 ...
- python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例
从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾.SAb免费资源网 import requests import json import xlrd from ...
- python自动获取号码归属地_Nemo_Python:批量获取并保存手机号的归属地和运营商_Nemo社区_LinkNemo_关于分享和探索的好地方...
从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾. import requests import json import xlrd from xlutils. ...
- python批量下载网页文件夹_Python实现批量从不同的Linux服务器下载文件
基于Python实现批量从不同的Linux服务器下载文件 by:授客 实现功能 批量从不同的Linux服务器下载指定文件 测试环境 Win7 64位 Python 3.3.2 pscp 64位 下载地 ...
- python 数据库查询结果邮件提醒_Python实现的查询mysql数据库并通过邮件发送信息功能...
本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: ...
- 用python数据分析excel多地天气_Python实现天气查询功能(外加Excel技巧)
昨天在网上发现了一个非常方便的天气API,就用Python试着用了一下.参数是挺少的,用起来也方便,但是那个城市代码确实是搞了我好长时间. 一.介绍 我们先来看一下实现的程序有什么功能: 功能也是非常 ...
- python如何替换文件部分内容_python 实现批量替换文本中的某部分内容
一.介绍 在做YOLOv3项目时,会需要将文本文件中的某部分内容进行批量替换和修改,所以编写了python程序批量替换所有文本文件中特定部分的内容. 二.代码实现 import re import o ...
- python识别火车票二维码_Python 实现火车票查询工具
一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你 ...
- python自动下载qq文件夹_Python实现批量下载文件
Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...
- python定时导出已发送文件_Python链接数据库查询导出查询结果到Excel并定时发送邮件到指定邮箱,实现巡检功能(亲测可用!!!)...
#python版本3.7 # -*- coding: utf-8 -*- """ Created on Wed Aug 1 11:35:17 2018 @author: ...
最新文章
- esp32 蓝牙启动流程_TWS真无线蓝牙耳机多功能测试设备
- BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
- 通过 .htaccess 实现缓存策略
- CoreJava 笔记总结-第九章 集合
- python定时器 循环_python从写定时器学习Thread
- 100人每人100元每次一人分1元给另一人问题matalb 求解
- “要么你去驾驭生命,要么生命驾驭你。你的心态决定谁是坐骑,谁是骑师。”...
- Golang实践录:工程管理
- 用linux集成电路版图设计,集成电路版图设计项目化教程(第2版)
- setValue:forKey of nsobject
- 【leetcode】二叉树(python)
- WSL:vi 的使用、只读下的修改操作
- 机器学习建模的问题大全
- 人与人之间的交往艺术
- VMware Fusion for mac虚拟机中Linux系统并使用ssh连接
- 输入某年某月某日,判断这一天是这一年的第几天?(JS实现)
- C#迭代器的详细用法
- C++20 barrier
- 阿里云服务器配置参数详细说明文档
- 计算机打开服务的命令行,Win7使用命令行启动和停止Windows服务程序技巧