有的代理IP是手机专用代理服务器,VIA会添加移动网络相关信息,如果用了这样的服务器做代理,爬虫访问目标页面就会跳转到移动端页面,导致页面内容和抓取 规则不匹配,从而抓取内容失败。
于是,我们可以在维护代理池的时候,检测是否是手机代理服务器,从而避免这种情况发生
# 判断是不是手机代理服务器
# 有些代理IP是手机专用服务器,会将via设置为手机相关,用这个代理后会访问网页会302跳转到移动端页面,导致爬取的页面内容不匹配
# 判断WAP关键字,例如:中兴 Via=ZXWAP GateWayZTE Technologies、移动梦网 Via=WTP/1.1 BJBJ-PS-WAP1-GW08.bj1.monternet.com,
# 通过判断网络格式 例如:移动网络格式 VIA=1.0 TD-LTE/FDD-LTE(sbwml.cn) (squid/3.1.23)
# 中国移动目前使用的GSM(2G)/TD-SCDMA(3G)/TD-LTE(4G)这3模;
# 中国联通使用的是GSM(2G)/WCDMA(3G)/TD-LTE(4G)/FDD-LTE(4G)。
# 貌似是一个给移动互联网提供解决方案提高网络运行效率的,例如:Via=1.1 Bytemobile OSN WebProxy/5.1
def checkMobileVia(self,via):
if not via:return False
print 'via:' + via
via = via.upper()
mobile_via = ['WAP','TD-LTE','FDD-LTE','CDMA','GSM']
#遍历判断
for word in mobile_via:
if via.find(word)>=0:
return True
return False
def check(self):
res = requests.head(url, headers=headers, proxies=proxies, timeout=0.3, allow_redirects=False)
if not res or self.checkMobileVia(res.headers.get('Via')): return False