美文网首页Python新世界超级工具大集合
玩爬虫这么久了,还没被封过IP,每次我都用临时IP!教你创建啊!

玩爬虫这么久了,还没被封过IP,每次我都用临时IP!教你创建啊!

作者: 919b0c54458f | 来源:发表于2018-09-26 15:13 被阅读85次

    需要的工具:

    requests ,json ,time 库

    chrome 浏览器

    产品型号 :TL-WDR6500 千兆版(其他用相同系统的也可)

    首先我们来看一下 tplink 的登陆界面 ,清爽的界面 ,只有一个登陆密码 。

    一个 post 请求 ,里面提交的参数都在最下面了 ,password 加密过了 ,因为我们是自己用就不研究加密算法了 ,直接把加密后的密码拿下来提交就好了 headers 全部复制下来 ,于是有了下面的代码 。

    进群:548377875   即可获取数十套PDF哦!

    headers = {

    'Accept':'application/json, text/javascript, */*; q=0.01',

    'Accept-Encoding':'gzip, deflate',

    'Accept-Language':'zh-CN,zh;q=0.9',

    'Connection':'keep-alive',

    'Content-Length':'54',

    'Content-Type':'application/json; charset=UTF-8',

    'Host':'192.168.1.1',

    'Origin':'http://192.168.1.1',

    'Referer':'http://192.168.1.1/',

    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',

    'X-Requested-With':'XMLHttpRequest'

    }

    def login():

    url_login = 'http://192.168.1.1/'

    data = json.dumps({"method":"do","login":{"password":LOGIN_PASSWORD}})

    return requests.post(url_login, data=data, headers=headers)

    我们用 requests 库来提交数据 ,方便简单 ,这里的 LOGIN_PASSWORD 就是我们加密后的代码 ,后面我们一起将这些设置的常量放到一个 settings 文件中 。然后我们通过这段代码来验证是否登陆成功 ,因为返回的 response 如果成功为 {"stok":"92830c5f504fed863705f1c4669bf1f1","error_code":0} 通过判断 error_code 来判断是否登陆成功前面的 eval_r(now) 显示一下当前时间 。

    r = login()

    if json.loads(r.text).get('error_code')==0:

    token = json.loads(r.text).get('stok')

    url_cmd = 'http://192.168.1.1/stok='+token+'/ds'

    print(eval(now)+': login success')

    后面进行请求断网重连(因为路由器断网之后会自动重连 ,我们只需要检测一下 ,在重连未成功的时候在进行连接请求就好了)。继续 F12 network 选项 ,找到那个和其他 ds 不一样的 ,查看得到以下 :

    我们继续模拟post请求就好啦~构造一个disconnect函数~

    def disconnect():

    data = json.dumps({"network":{"change_wan_status":{"proto":"pppoe","operate":"disconnect"}},"method":"do"})

    response = requests.post(url_cmd,data=data,headers=headers)

    return response

    好到这部分基本差不多了 ,我们再整理完善一下 ,加一个测试 ,再加一个如果路由器没有自动重连的时候我们进行拨号联网 。最后把设置的东西放到 settings 文件中就 ok 啦 。 在测试之前延时了 10 s ,因为拨号需要时间嘛 。

    PS :

    这里有个小坑 ,每一次的url_cmd都是不同的 。我们可以从登陆后的页面内拿到 ,设置一个全局变量即可 。这个值在登陆后的 response 中的 stok 内 ,拿到这个值我们就可以构造出这个url_cmd ,最后main代码如下:

    def main():

    global url_cmd

    now = "time.strftime('%H:%M:%S',time.localtime(time.time()))"

    r = login()

    if json.loads(r.text).get('error_code')==0:

    token = json.loads(r.text).get('stok')

    url_cmd = 'http://192.168.1.1/stok='+token+'/ds'

    print(eval(now)+': login success')

    else:

    print(eval(now)+': login failed')

    return None

    response = disconnect()

    if json.loads(response.text).get('error_code')==0:

    print(eval(now)+': disconnect success')

    else:

    print(eval(now)+': disconnect failed')

    time.sleep(10)

    for i in range(TRY_TIMES+1):

    if test():

    print(eval(now)+': success to connect to network')

    break

    else:

    print(eval(now)+': faile to connect to network')

    reconnect()

    其他款路由器应该也差不多,还有操作之前需要咨询网络运营商开通拨号。最后,我们再加上一个显示当前IP的功能,直接调用了一个网上的api,一句话就ok。

    new_ip = json.loads(requests.get('http://api.k780.com/?app=ip.local&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json').text)['result']['ip']

    最后看一下效果:

    相关文章

      网友评论

      • 94c24049e1cb:我就说一句!
        盗用文章建议原创了吗?这是发在我公号小詹学python的原创文!你不注明出处?还故意抹去水印?我建议你尊重原创!
        请尽快回复评论,避免举报伤感情
      • 天上下雪不下雨:这样链接创建的ip,基本不怎么变的嘛

      本文标题:玩爬虫这么久了,还没被封过IP,每次我都用临时IP!教你创建啊!

      本文链接:https://www.haomeiwen.com/subject/jpadoftx.html