刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就ok了嘛~但是,网上免费接口要么限制访问频率(淘宝的),要么限制访问次数(百度及其他)

没辙了,从百度找到了几个在线查询的接口,要么不够准确(或者说她们的数据库太旧了),要么就是速度太慢了,跟限制访问似的(没办法,小规模人家的服务器的确不够好)

于是乎就想到了百度首页的ip接口,就这货:

为了防止泄露隐私,其中ip地址信息已经在控制台稍作修改

随便输入一个ip,点击查询

没想到,百度的接口竟然就这么暴露出来了,如此简单,试试能不能直接用

ip00.py

from pprint import pprint
import requests
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
res = requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=112.53.65.12&co=&resource_id=6006&t=1551419352431&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery110200929818675063574_1551418734860&_=1551418734868')
print(res.text)

返回结果:

('/**/jQuery110200929818675063574_1551418734860({"status":"0","t":"1551419352431","set_cache_time":"","data":[{"location":"山东省青岛市 ''移动","titlecont":"IP地址查询","origip":"112.53.65.12","origipquery":"112.53.65.12","showlamp":"1","showLikeShare":1,"shareImage":1,"ExtendedLocation":"","OriginQuery":"112.53.65.12","tplt":"ip","resourceid":"6006","fetchkey":"112.53.65.12","appinfo":"","role_id":0,"disp_type":0}]});')

与浏览器访问返回结果一样,这个太出乎意料了,好吧,b厂还是留了点情面的,可是他们家的接口只能按年来买,大概要999RMB/年

再测试一下换个 ip 地址继续查询还能不能查到结果(防止后面的数据是加密的)

这个呢,其实最好的办法是在浏览器中进行测试,换个ip看一下控制台的url会不会有变化(主要是后面的参数),可能会存在加密数据,其实这个我测试了,会有一个参数变化 ,但是我重复提交时没发生改变一样能够请求数据,几乎就可以说明这个参数是迷惑用的(也可能是时间戳吧,我忘了具体什么参数了.时间戳的话就更好了,为了防止浏览器有缓存的)

ip01.py

from pprint import pprintimport requests
res = requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=112.53.54.12&co=&resource_id=6006&t=1551419352431&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery110200929818675063574_1551418734860&_=1551418734868')
print(res.text)

返回结果:

('/**/jQuery110200929818675063574_1551418734860({"status":"0","t":"1551419352431","set_cache_time":"","data":[{"location":"广东省 ''移动","titlecont":"IP地址查询","origip":"112.53.54.12","origipquery":"112.53.54.12","showlamp":"1","showLikeShare":1,"shareImage":1,"ExtendedLocation":"","OriginQuery":"112.53.54.12","tplt":"ip","resourceid":"6006","fetchkey":"112.53.54.12","appinfo":"","role_id":0,"disp_type":0}]});')

ok,数据更换ip也是没有问题的,也不需要伪装agent

那么我们来尝试一下访问频率有没有限制:

这里先为大家介绍一个库:faker

这是一个python造假用的库,可以生成很多测试数据,姓名地址电话等等信息

这里推荐一位陌生老哥的博客:https://www.cnblogs.com/blueteer/p/10277725.html,如果不知道这个库,可以看一眼下面的 小demo:

faker_test.py

from faker import Fakerf = Faker('zh-CN')
print(f.ipv4())

返回结果:

101.208.5.200

这段代码就这点功能,就是可以生成随机ip地址

ip02.py

from pprint import pprintimport requests
from faker import Fakerf = Faker('zh-CN')for i in range(100):ip = f.ipv4()res = requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=' + ip +'&co=&resource_id=6006&t''=1551419352431&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb''=jQuery110200929818675063574_1551418734860&_=1551418734868')pprint(res.text)

这里稍微整理了一下url,就是换了个行而已

返回结果(太多了 ,截个图意思意思)

速度挺快,待会儿再测试一下它的耗时到底有多少

数据杂乱不好整理,直接来个简单粗暴的分割字符串吧:

稍作修改后:

ip03.py

import requests
from faker import Fakerf = Faker('zh-CN')for i in range(100):ip = f.ipv4()res = requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=' + ip +'&co=&resource_id=6006&t''=1551419352431&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb''=jQuery110200929818675063574_1551418734860&_=1551418734868')text = res.textlocation = text.split('location":"')[1].split('","titlecont')[0]print(location)

吓死我了,刚才断网了,我还以为百度的这条路只能走这么远了呢,毕竟我上午已经弄了不少数据了,下午就不行的话,我这一上午岂不是白瞎了

返回结果

澳大利亚
澳大利亚
广东省 电信
韩国
美国
美国
美国
比利时
美国
美国
...

后面的不发了,太长了
最后,来计个时

ip04.py

from time import timeimport requests
from faker import Faker# 获取当前秒级时间戳
t1 = int(time())
f = Faker('zh-CN')
for i in range(100):ip = f.ipv4()res = requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=' + ip +'&co=&resource_id=6006&t''=1551419352431&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb''=jQuery110200929818675063574_1551418734860&_=1551418734868')text = res.textlocation = text.split('location":"')[1].split('","titlecont')[0]print(location)
t2 = int(time())
print(t2 - t1)

返回结果:

...
美国
美国
美国
荷兰
美国
美国
澳大利亚
澳大利亚
19

还不错吧,100个耗时19秒,想要更快可以试试java或者多线程吧,反证我就用这一次,而且也不赶时间,估计今晚就把我那些数据搞定了

最后娱乐一下,缩减一下代码行数(计时就去掉了,反正对我也没什么实际用途)

import requests;from faker import Faker;f = Faker('zh-CN');print([requests.get('https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=' + f.ipv4() +'&resource_id=6006&_='+str(i)).text.split('ation":"')[1].split('","tit')[0] for i in range(10)])

【Python爬虫案例学习9】python爬取免费优质IP归属地查询接口相关推荐

  1. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...

  2. 【Python爬虫案例学习21】爬取某站上海租房图片

    ####前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. ####基本环境配置 pytho ...

  3. python爬淘宝店铺_【Python爬虫案例学习】Python爬取淘宝店铺和评论

    安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动sel ...

  4. 利用python爬虫(案例6+part14)--如何爬取科研数据

    学习笔记 文章目录 Ajax动态加载网站数据抓取 动态加载的类型 那么该如何抓取数据? 如何得到JSON文件的地址? 观察JSON文件URL地址的查询参数 JSON格式数据转换成python字典 如何 ...

  5. 5分钟python爬虫案例,手把手教爬取国内外最新疫情历史数据

    俗话说的好,"授之以鱼不如授之以渔",所以小编今天就把爬疫情历史数据的方法分享给你们. 基本思路:分析腾讯新闻"抗肺炎"版块,采用"倒推法" ...

  6. python爬虫案例-陶瓷公司数据爬取

    用requests爬取要注意HTTPConnectionPool(host=xxx, port=xxx): Max retries exceeded with url...异常,出现这个异常的解决方法 ...

  7. python爬虫之股票数据定向爬取

    python爬虫之股票数据定向爬取 功能描述 目标:获取上交所和深交所所有股票的名称和交易的信息 输出:保存到文件中 技术路线:requests-bs4-re 前期分析 选取原则:股票的信息静态存在H ...

  8. python爬虫初学实战——免登录爬取easyicon里的vip图标(2)

    python爬虫初学实战-免登录爬取easyicon里的vip图标(2) 实验日期:2020-08-09 tips:没看过前面(1)的可以康康,指路 -> 爬取easyicon里的png图标 成 ...

  9. python爬虫 - 起点女生榜单爬取 - 1

    python爬虫 - 起点女生榜单爬取 ​ 最近一直在追庆余年,顺带瞄了一眼小说,真真是精彩(虽然因为范闲多妻的设定接受不了就放弃了). ​ 说来说去,还是钟爱女频的修仙小说,所以就想爬一下起点女生网 ...

最新文章

  1. php protected 的继承,14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式...
  2. .net上传,一个选择直接上传(ashx)和byteArray上传
  3. 服务器安装mysql要密码_在阿里云服务器上安装mysql及重置密码
  4. Cookie和Session简介与区别
  5. ZOJ 2562 More Divisors
  6. 如何找出光纤微米级别的脏污?女朋友的一个举动给了我灵感
  7. C# XmlReader
  8. 首款物联网防火墙himqtt开源
  9. 从Go走进plan9汇编
  10. Linux 下使用 sem_t 有名信号量的注意事项
  11. 插入法排序c语言程序,C语言之插入排序算法
  12. 资源警告!有人收罗了40个中文NLP词库,放到了GitHub上
  13. 数据库,计算机网络、操作系统刷题笔记20
  14. mysql的char和varchar_MySQL中CHAR和VARCHAR的区别及应用场景
  15. cometd: Bayeux Protocol
  16. 熬之滴水穿石:一切从windows编程开始(3)
  17. 小青蛙oracle跟踪,在小青蛙TOAD中用oracle语句写
  18. 高速 CAN 总线收发器DP1040C PIN对PIN兼容TJA1040
  19. 格式化数据方法 sanitize
  20. 2022年NOC软件创意编程(学而思)决赛小学低年级组scratch

热门文章

  1. python 在一个py文件中调用另一个文件夹下py文件模块
  2. Java实现 LeetCode 374 猜数字大小 II
  3. 唯品会数据笔试mysql_唯品会测试开发笔试记录
  4. win10 c语言语音朗读,win10怎么使用语音朗读?win10开启语音播报讲述人的办法
  5. vue导入xlsx-style组件报错Can‘t resolve ‘./cptable‘ in ‘xxx\node_modules_xlsx
  6. Array [] 数组
  7. word设置多级标题,一级标题为“一”,二级标题为“1.1”
  8. python去除数据集里空格_Python将文本去空格并保存到txt文件中
  9. 数据分析平台页面设计_平台设计剖析
  10. open-falcon之HBS