最近用爬蟲爬豆瓣上的資料,無奈老是被封,agent假裝和cookie修改這些都用過了,惋惜都起不了什麼做用,到了必定次數,仍是會返回403。想用代理ip,無奈免費的太不穩定,買收費的又有點不必。今天在查資料的時候,讀到一篇談ADSL撥號代理的文章,恰好我又是用這種方式上網,因而想到了一個對付豆瓣反爬蟲的辦法,當爬蟲檢測到被封的時候,斷開路由器鏈接,休眠一段時間以後繼續爬。javascript
ps:個人路由器型號是TL-WR842Nhtml
#!/usr/bin/env python # -*- coding: utf-8 -*- # 用來斷開路由鏈接,目的是經過這個方法換ip import requests import json import ssl import time ssl._create_default_https_context = ssl._create_unverified_context data = { "method":"do", "login":{"password":"你加密後的密碼"} # 登錄後觀察得到 } # 根據本身的狀況來填 headers = { 'Host':'192.168.0.1', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36', 'Accept':'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding':'gzip, deflate', 'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7,zh-TW;q=0.6', 'Connection':'keep-alive', 'Content-Length':'50', 'Content-Type':'application/json; charset=UTF-8', 'Origin':'http://192.168.0.1', 'Referer':'http://192.168.0.1/', 'X-Requested-With':'XMLHttpRequest' } url = "http://192.168.0.1/" html = requests.post(url,json=data,headers=headers,verify = False) print(html.headers) stok = json.loads(html.text)["stok"] full_url = "http://192.168.0.1/stok="+ stok +"/ds" Disconnect = {"network":{"change_wan_status":{"proto":"pppoe","operate":"disconnect"}},"method":"do"} # 經過觀察得到 disconn_route = requests.post(url=full_url, json=Disconnect).json() print(disconn_route)
進入你的路由器管理頁,個人是http://192.168.0.1/,開啓瀏覽器的抓包界面,個人是chrome,直接f12就好了,而後輸入密碼登陸。java
打開Network選項卡,找到第一個名爲192.168.0.1的文件,在右側找到Request Payload部分,在這裏能夠找到你登陸時加密後的密碼,實際上直接點view source,而後把內容拷貝到代碼裏就好了。python
也是在剛纔那個文件找到Request Headers而後把內容拷貝過去。git
譬如我想斷開鏈接,因而進入路由設置→上網設置界面,經過Element找到按鈕的html元素,最後找到它回調函數文件:github
點進去文件後找到.action操做,這就是斷開鏈接須要調用的函數了。chrome
填好這些信息以後,運行代碼並觀察結果。若是調用成功,則打印:{u'error_code': 0}json
這就是TL-WR842N的路由器控制腳本,型號不一樣的則不必定適用。瀏覽器
1. 使用xx-net後 不能用python重啓路由 #10283cookie