前提
python
scrapy
問(wèn)題描述
- 搜狗微信搜索關(guān)鍵詞出現(xiàn)安全驗(yàn)證
- 地址:https://weixin.sogou.com/antispider/?from=%2Fweixin%3Fp%3D01030402%26query%3D%E6%B3%B0%E5%B1%B1%26type%3D2%26ie%3Dutf8
-
截圖
image.png
用戶您好,我們的系統(tǒng)檢測(cè)到您網(wǎng)絡(luò)中存在異常訪問(wèn)請(qǐng)求。
此驗(yàn)證碼用于確認(rèn)這些請(qǐng)求是您的正常行為而不是自動(dòng)程序發(fā)出的,需要您協(xié)助驗(yàn)證。 - 直接使用瀏覽器連續(xù)刷新(20次左右)就會(huì)觸發(fā)安全驗(yàn)證,這樣可能誤傷到正常用戶
-
postman模擬請(qǐng)求連續(xù)刷新也會(huì)觸發(fā)安全驗(yàn)證
image.png
解決辦法
識(shí)別圖片驗(yàn)證碼
- 超級(jí)鷹打碼,識(shí)別圖片驗(yàn)證碼
- 驗(yàn)證通過(guò)仍然會(huì)被驗(yàn)證
代理IP
- 觸發(fā)安全驗(yàn)證的依據(jù)是檢測(cè)IP的訪問(wèn)頻率
- 代理IP正好解決這個(gè)問(wèn)題
如何使用
- 搜集網(wǎng)上免費(fèi)的代理,雖然行但是質(zhì)量很不好
- 付費(fèi)代理IP,短時(shí)高效,高匿的會(huì)更好
-scrapy接入代理IP,代理IP通過(guò)購(gòu)買的接口獲取
class ProxyMiddleware(object):
def __init__(self, proxy_url, proxy_auth):
self.logger = logging.getLogger(__name__)
self.proxy_url = proxy_url
self.proxy_auth = proxy_auth
def get_random_proxy(self):
try:
response = requests.get(self.proxy_url)
if response.status_code == 200:
proxy = response.text
return proxy
except requests.ConnectionError:
return False
def process_request(self, request, spider):
proxy = self.get_random_proxy()
if proxy:
json_data = json.loads(proxy)
ip = json_data['ip']
port = json_data['port']
proxy_info = self.proxy_auth + '@' + ip + ':' + str(port)
uri = 'https://{proxy}'.format(proxy=proxy_info)
request.meta['proxy'] = uri
self.logger.debug('使用代理:' + proxy)
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
return cls(
proxy_url=settings.get('PROXY_URL'),
proxy_auth=settings.get('PROXY_AUTH')
)
'DOWNLOADER_MIDDLEWARES': {
'wechatest.middlewares.ProxyMiddleware': 543,
},
再啟用就可以了
結(jié)果
使用代理IP可以解決安全驗(yàn)證的問(wèn)題(IP頻率反爬)

