如何获取临时 IP 进行爬虫学习 ?

简介:

自己在家里学习爬虫的时候 ,遇到封 IP 怎么办呢 ?网上买 IP 又贵 ,用免费代理质量又不好 。其实 ,家中自用的宽带如果可以进行拨号的话 ,我们是可以直接用 python 来控制路由器的 。将路由器断开 ,再重新连接下 IP 不就变了吗 ,非常方便 ,而且 IP 质量很高 ,都能直接使用 。

我就以我自己家里面的路由器来做个示范 。(完整代码见留言区置顶留言 。)

需要的工具:
requests ,json ,time 库
chrome 浏览器
产品型号 :TL-WDR6500 千兆版(其他用相同系统的也可)

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

ed943cfc438b0aaae6cebcebfbf8f1ec6b68df2a

首先进行分析 ,打开chrome ,F12 查看 network ,第一个就是我们需要分析的 。

3cc5059792067ce2ce0e89ca8210eb7be0f24f4e

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


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 不一样的 ,查看得到以下 :

31823f76f8b6dda2ebcb94e2144da91a8e4a0231

我们继续模拟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 ,因为拨号需要时间嘛 。

6600bfee334ae57f11ecf760c5628f9764ac9d90

好了 ,到这里就结束了 。测试一下 。

787fea69f53898ea9873b5a7b5e02b5830c17ad3

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']

最后看一下效果:

6fb589cdedc4c0f89ecf8709d3c35d23ae19735e

原文发布时间为:2018-09-8本文作者:Blight本文来自云栖社区合作伙伴“ 小詹学Python”,了解相关信息可以关注“ 小詹学Python”。
相关文章
|
9月前
|
数据采集 安全 数据中心
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
|
2月前
|
数据采集
静态代理IP对反爬虫策略的应对,以及静态ip对爬虫的助力
静态代理IP在爬虫应用中用于隐藏真实IP,抵御反爬策略。选择可靠代理服务提供商,获取代理IP并配置到爬虫程序。为防止被封锁,可定期切换代理IP、使用多个代理、降低爬取频率及伪装HTTP头信息。这些策略能有效提升爬虫的匿名性和安全性。
|
2月前
|
数据采集 定位技术 Python
Python爬虫IP代理技巧,让你不再为IP封禁烦恼了! 
本文介绍了Python爬虫应对IP封禁的策略,包括使用代理IP隐藏真实IP、选择稳定且数量充足的代理IP服务商、建立代理IP池增加爬虫效率、设置合理抓取频率以及运用验证码识别技术。这些方法能提升爬虫的稳定性和效率,降低被封禁风险。
|
2月前
|
数据采集 安全 API
SOCKS5代理IP:为什么它是网络爬虫的首选?
代理IP在网络爬虫中扮演重要角色,尤其是SOCKS5代理因其灵活性(支持多种协议)、高度匿名性、高速稳定性和安全性而备受青睐。它能帮助爬虫绕过访问限制,隐秘高效地收集数据,同时提供身份验证以保障安全。穿云API作为代理协议,在爬虫领域也受到推崇。
|
2月前
|
数据采集 大数据
爬虫为什么要使用代理IP?
网络爬虫在大数据时代中扮演关键角色,但面临反爬系统和地域IP限制的挑战。高匿名代理IP成为解决之道,它隐藏真实IP,防止封禁,支持多IP并发爬取,突破地域限制,提高爬取效率。然而,应对复杂反爬策略仍需结合有效的爬虫策略。选择高质量代理IP服务商至关重要。
|
2月前
|
数据采集 Web App开发 数据安全/隐私保护
Python爬虫-使用代理伪装IP
介绍代理,设置代理,使用代理伪装IP案例
494 0
|
2月前
|
数据采集
在爬虫过程中,如何避免被封禁 IP 地址?
在爬虫过程中,如何避免被封禁 IP 地址?
83 0
|
数据采集 存储 安全
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
198 0
Python爬虫实战:利用代理IP爬取某瓣电影排行榜并写入Excel(附上完整源码)
|
2月前
|
数据采集 监控 JavaScript
Python网络爬虫进阶:自动切换HTTP代理IP的应用
Python网络爬虫进阶:自动切换HTTP代理IP的应用
|
2月前
|
数据采集 安全 JavaScript
百度搜索:蓝易云【高防IP如何防止爬虫和Web攻击?】
总之,高防IP通过多种技术和策略的综合应用,提供了强大的防御能力,可有效防止爬虫和Web攻击对服务器的威胁。它能够识别恶意流量、限制访问、拦截攻击和保护服务器的稳定性和安全性。
48 0