吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3818|回复: 10
收起左侧

[Python 转载] python爬取免费优质IP归属地查询接口

[复制链接]
liangyun 发表于 2019-3-1 15:15
本帖最后由 liangyun 于 2019-3-1 15:24 编辑

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

  • 说明;对过程不感兴趣的朋友可以直接看倒数第二段代码,在最后的位置
  • 另外,最近很多人说学python热,但是用途并不大,甚至不好找工作,新手入坑还望慎重.另外,我是做java的,python是业余爱好,我不会为我说的话承担后果
  • 还有就是,好多人整天爬虫真的没意思,因为,暂时还没有实现价值.或许可以搞一些有价值的东西爬一下,以学习为目的的话,后果并不严重(不要以装B为目的)

具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地

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

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

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

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

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

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

ip00.py
from pprint import pprint

import requests
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')
pprint(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 pprint

import 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')
pprint(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 Faker

f = Faker('zh-CN')
print(f.ipv4())

返回结果:

101.208.5.200

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

ip02.py
from pprint import pprint

import requests
from faker import Faker

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')
    pprint(res.text)

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

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

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

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

稍作修改后:

ip03.py
import requests
from faker import Faker

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.text
    location = text.split('location":"')[1].split('","titlecont')[0]
    print(location)

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

返回结果

澳大利亚
澳大利亚
广东省 电信
韩国
美国
美国
美国
比利时
美国
美国
...后面的不发了,太长了

最后,来计个时

ip04.py
from time import time

import 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.text
    location = 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)])

这里主要是精简了一部分url,不知道修改后还好不好使了

python一行代码(251字)搞定爬取百度ip接口并实现查询数据(欢呼)

好险这字数,还好没再删东西,哈哈哈,别整这些没用的了

免费评分

参与人数 1热心值 +1 收起 理由
小不点吃鱼 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| liangyun 发表于 2019-3-1 15:19
诶,好难受啊,等级不够,发图大小有限制,先发到博客园再复制过来,结果图片预览的时候还限显示,发出来就不显示了...我没辙了,附上博客园链接吧
https://www.cnblogs.com/liangyun/p/10456440.html
小不点吃鱼 发表于 2019-3-1 15:38
能推荐好点的教程吗,新手想学习,一直没找到方法
 楼主| liangyun 发表于 2019-3-1 15:43
小不点吃鱼 发表于 2019-3-1 15:38
能推荐好点的教程吗,新手想学习,一直没找到方法

新手可以尝试看一下小甲鱼,建议先看个前九章节来入门
    入门后可以看一下黑马最新的教程
吾爱就有相关资源
幻象 发表于 2019-3-1 15:44 来自手机
青岛的互联网环境怎么样?想去找工作
 楼主| liangyun 发表于 2019-3-1 15:46
幻象 发表于 2019-3-1 15:44
青岛的互联网环境怎么样?想去找工作

抱歉,误会了,我在济南,那些ip是我随便写的,青岛的话,互联网相关估计不好混,毕竟整个山东的软件行业都不太出色.新人在山东还是推荐济南.当然如果你有关系或者近亲去别的城市有个照应另说
hmeng 发表于 2019-3-1 15:56
学习一下
小不点吃鱼 发表于 2019-3-1 16:03
liangyun 发表于 2019-3-1 15:43
新手可以尝试看一下小甲鱼,建议先看个前九章节来入门
    入门后可以看一下黑马最新的教程
吾爱就有相 ...

谢谢,新手看教程,有大神推荐,能少走弯路,非常感谢
 楼主| liangyun 发表于 2019-3-1 16:06
小不点吃鱼 发表于 2019-3-1 16:03
谢谢,新手看教程,有大神推荐,能少走弯路,非常感谢

如果想凭python找工作的话,还是有些难度的,希望你慎重.咱们普通人估计也只能走黑马
小不点吃鱼 发表于 2019-3-2 08:56
liangyun 发表于 2019-3-1 16:06
如果想凭python找工作的话,还是有些难度的,希望你慎重.咱们普通人估计也只能走黑马

非计算机专业的,目前只业余爱好,看到网易(好像是)有一个课程是用python来解决工作中问题,能用来解决一些问题就行,以后的大数据也是趋势,跟着打个酱油。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 03:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表