反反爬虫
通常通过如下方法来进行反爬虫
- 检查User-Agent
- 验证码
- 一个IP访问的频次或总的访问次数
- cookie有效时间
- 数据存储为图片格式
应对方法:
- 随机UA
# -*- coding:utf-8 -*-
"""
File Name : 'random_ua'.py
Description:
Author: 'chengwei'
Date: '2016/5/13' '16:31'
"""
import sys
import random
# reload(sys)
# sys.setdefaultencoding('utf-8')
def example():
print random_chose()
def random_chose():
"""
随机返回列表中的UA
:return:
"""
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ (KHTML, like Gecko) Element Browser 5.0',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'
]
user_agent = random.choice(user_agents)
ua = {'User-Agent': user_agent}
return ua
if __name__ == '__main__':
example()
验证码,使用opencv进行预先处理,再通过Tesseract-OCR识别,当然如果针对特定的验证码进行人工训练,效果更好。验证码部分请参考爬虫:8.验证码识别部分。
一个IP的访问频次或者总的次数,需要大量的代理IP。
后面会用go实现一个动态IP,对外开放一个IP,此IP将请求转发到后台的代理IP去执行请求。cookie有效时间经常针对账号和IP,常用的解决办法是建立账号对应的cookie池,并自动更新,随机使用cookie,一旦无效就进行更新或者排除,排除是因为某些情况一个账号一天只允许特定次数的请求。
有的网站将部分数据以图片格式存储,那么我们又需要应用OCR技术。
提供OCR接口的公司很多,微软的牛津计划中就有很方便的OCR接口,而且每个月的免费次数不少,一般情况够用。
附牛津计划地址:https://www.azure.cn/cognitive-services
欢迎补充!