知乎豆瓣怎样识别使用高匿代理爬虫的真实IP
1.首先解决你的问题,如何确定使用的代理是否为高匿名代理在这里斗胆推荐一个开源的验证接口:http://httpbin.org/get,此接口支持HTTP和HTTPS,需要自己在URL中改变(http://,https://),能返回请求头和响应中的各种你想要的信息。
验证方法:设置好代理,请求此接口(只需要带一个UA即可),解析响应的json文件,获取匿名程度。
a.如果origin中包含自己真实的IP,则为透明代理;
b.如果响应中包含Proxy-Connection参数,则为匿名代理;
c.其他情况则为高匿代理;
对应的具体的Python代码如下(业余coding,代码是我在做代理池项目的时候写的,直接拷过来,将就看):def verifyHiddenCountryArea(ip, port):\theaders = {"User-Agent": user_agent.get_pc_ua()}\tproxy = {\u0026#39;http\u0026#39;: str(ip) + \u0026#39;:\u0026#39; + str(port), \u0026#39;https\u0026#39;: str(ip) + \u0026#39;:\u0026#39; + str(port)}\ttry:\t\tstart = time.time()\t\tres = requests.get(VERIFY_HIDDEN_URL, headers=headers, proxies=proxy, timeout=VERIFY_SPIDER_REQUESTS_TIMEOUT)\t\tspeed = round(time.time() - start, 2)\t\tresponse = json.loads(res.text)\texcept Exception as e:\t\tprint(\u0026#39;验证匿名程度的API可能失效了: \u0026#39;, Exception, \u0026#39;:\u0026#39;, e)\t\treturn {\u0026#39;status\u0026#39;: False}\telse:\t\torigin_ip = response.get(\u0026#39;origin\u0026#39;, \u0026#39;\u0026#39;)\t\tproxy_connection = response.get(\u0026#39;Proxy-Connection\u0026#39;, None)\t\t# 透明\t\tif(\u0026#39;,\u0026#39; in origin_ip):\t\t\torigin = origin_ip.split(\u0026#39;,\u0026#39;)\t\t\tfor ip in origin:\t\t\t\tif(ip == MY_IP):\t\t\t\t\thidden_id = 1\t\t\t\t\tbreak\t\t\t\telse:\t\t\t\t\thidden_id = 2\t\t# 匿名\t\telif(proxy_connection):\t\t\thidden_id = 2\t\t# 高匿\t\telse:\t\t\thidden_id = 3\t\ttry:\t\t\tresponse = reader.city(ip)\t\t\tcountry = response.country.names\t\t\tif(country == \u0026#39;中国\u0026#39;):\t\t\t\tcountry_id = 1\t\t\telse:\t\t\t\tcountry_id = 2\t\t\ttry:\t\t\t\tcity = country + response.city.names\t\t\texcept:\t\t\t\tcity = country + response.city.name\t\texcept:\t\t\tcountry_id = False\t\t\tcity = False\t\t# # IP地址不合法\t\t# except ValueError as value_error:\t\t# \tprint(value_error)\t\t# # 数据库中无此IP地址\t\t# except AddressNotFoundError as notfound_error:\t\t# \tprint(notfound_error)\t\t# # geoip bug\t\t# except maxminddb.InvalidDatabaseError as geoip_bug:\t\t# \tprint(geoip_bug)\treturn {\u0026#39;status\u0026#39;: True, \u0026#39;hidden_id\u0026#39;: hidden_id, \u0026#39;country_id\u0026#39;: country_id, \u0026#39;city\u0026#39;: city}2.爬网站时,返回443问题如何解决?利用上面的接口确定自己的代理IP没问题后,需要确定目标爬虫的反爬虫机制是否研究清楚了,因为往往被识别到爬虫后,每个程序员可能会以各种骚操作给你返回。那么如何确定呢?大可以先抓包,确定请求都包含了哪些参数。然后使用Postman工具把参数都带上,模拟请求,最终逐步确定反爬虫验证的参数,期间如果遇到IP问题,可以开全局VPN后再进行模拟请求。
Postman | The Collaboration Platform for API Development 当再postman中模拟请求,都没问题后,再上代码,这样才能一步步解决问题。
3.规范化自己的代理池代码上实现了爬虫单例后,注意规范好自己的代理池,因为一般免费的代理,一段时间后都会失效,有条件的情况下,最好建一个自己的代理池,并做好定时验证有效性,才能保证代理IP的高可用性,比如下面是我个人使用的小IP代理池,解决个人日常的一些常规爬虫,足够了。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 知乎有没有必要增加一个特别关注功能
