Python登陆小米路由器拨号更换IP,绕过网站反爬IP限制机制

2023-04-19 19:01:07

图/文:迷神

最近无聊去爬某眼查的企业数据信息,我已经通过其他方式,把企业数据按照分类和某眼查的属于存到表里面,只要通过某眼查的url地址爬取内容详细页所需要的数据就可以了。但是呢,某眼查作为国内专门抓别人的数据的站,基本上各种反扒机制都有。比如这某眼查如果未登录用户,只能爬100条,超过,立马要求登陆。

有人可能说,怎么不用代理,答案是可以的,但是免费代理,网上一堆免费,但是我实际爬过N多站,基本上100个,能有5个就不错了。大部分都很假,当然土豪也可以去付费去买,然后验证下去买,但是,我们这里借助我们家庭wifi拨号上网模式,只要被限制,立马通过python断网,然后重连,进行更换IP。

Python+小米miwifi路由:

1、获取路由拨号地址

小米路由界面,这里是拨号上网,切换IP

大家可以手动登录下小米路由器(你如果用python等会获取结果一样的,因为这个本地miwifi。com是指向服务器的,可以保持长时间在线的,没必要反复登录,我就不模拟登陆了,都是很easy的事情),可以看到这个拨号联网,是2个开始和暂停js事件,我们只要访问这个地址,即可实现,路由进行拨号上网,即可:

这里我们用到3个类库,先安装下:

pip install pyquery #用于解析某眼查的页面的,非常强大的一个html解析库,有空可以讲讲 pip install requests #页面请求。 pip install retrying #python异常重试类库

爬虫切换路由IP整体思路

1、就是通过数据库,获取某眼查url地址,然后开始爬数据,如果爬取不到想要到的内容,则是被拦截了。

res = mydb.select('url', cond_dict = {'name':'0'},fields=["id", "url"],order="order by id asc limit 1") id = res[0][0] url = res[0][1] print(url) r = s.get(url,headers=headers, timeout=5) html = r.text d = PyQuery(html) name = d.find('h1.name').text() if not name: if html.find('>抱歉,该信息暂不予显示,查一查其它信息<') != -1: name = '企业异常,不予以展示' else: name = '' print(str(i)+":"+name) url2 = d.find('a.company-link').text() print(url2) if len(name) == 0: print('被拦截了'+str(i)) else: update_params = {"name": name,"wz":url2} # 需要更新为什么值 update_cond_dict = {"id": str(id)} # 更新执行的查询条件 mydb.update('url', update_params, update_cond_dict)

2、调用小米路由器的接口,进行拨号更换,一屏蔽IP,就立马更换IP。

print('开始断网切换IP') r = s.get("网址/cgi-bin/luci/;stok=固定密钥/api/xqnetwork/pppoe_stop") for ms in range(10): print('断网连接'+str(ms)+'秒') time.sleep(1) print('开始联网切换IP') r = s.get("网址/cgi-bin/luci/;stok=固定密钥/api/xqnetwork/pppoe_start") for ms in range(15): print('等待联网'+str(ms)+'秒') time.sleep(1)

3、这里调用retrying模式,就是当出现异常的时候,进行重试,这样就可以实现反复不断的爬取内容,

from retrying import retry @retry(stop_max_attempt_number=50000,wait_fixed=2000) def tyc(): #代码 if __name__ == '__main__': tyc()

最后我们的结果就变成这样了。

最终结果

这样,就可以不断反复爬数据了,不过,有银子,还是建议买代理吧,一般Vip代理好一点。

好了,就这么多啦,我是迷神,更多精彩,记得关注我哦,请多多转发,有问题也可以评论哦。如果需要完整的代码,也可以私信给我,发你哈,不过记得关注下哦。