频繁访问同一网站,怎样防止被封?

在数据为王的时代,训练一个优秀的模型,需要大量的数据。通过网络收集有效数据无疑是一个快捷有效的方式。在爬取网络数据时,需要频繁向同一个网站发送请求。这不,小梅同学在访问某食谱网站时遇到了错误

{"result":0,"code":-8,"msg":"operation too frequent."}

查资料后,尝试了以下几种方案,记录如下:

  • 方案一:等等
def request_site(self, url): 
    # 随机产生一个等待时间值
    duration = random.randint(10,20)    
    time.sleep(duration)   
    result = requests.get(url)
  • 方案二:随机 user-agent
from fake_useragent import UserAgent
def request_site(self, url):
    user_agent = UserAgent()
    headers = dict()
    headers['User-Agent'] = user_agent.random
    result = requests.get(url, headers=header)
  • 方案三:代理ip

首先需要获取代理ip。可购买(如 芝麻代理代理蚂蚁 等),或从免费ip网站上爬取。不管付费还是免费的,只想说,谁用谁知道! 既然良莠不齐,那验证代理ip是否有效的方法就及其重要。目前发现常用的两种验证代理ip是否有效的方法。

方法1:响应状态码是200

def check_proxy(self,ip):   
    tar_url = "https://www.baidu.com/"    
    proxies = {        "http": ip,    }    
    try:        
        res = requests.get(tar_url, proxies=proxies, timeout=5)
        # 响应状态码是200,则是有效的
        if res.status_code == 200:          
            return True       
        else:                     
            return False    
    except requests.RequestException as e:        
        return False

方法2:判断访问的ip是否为代理ip。

访问类似http://icanhazip.com/ 这样的网站,网站会返回访问者的ip,如果访问者的ip等于代理的ip。那么此代理IP就生效了。

def check_proxy(self,ip): 
    try:   
        this_proxy = "http://" + IP    
        this_ip = "".join(IP.split(":")[0:1])      
        res = requests.get(url="http://icanhazip.com/", timeout=8, proxies={"http": this_proxy })  
        # 判断返回的ip是否等于代理ip
        if res.text.strip() == this_ip:        
            return True    
        else:     
            return False
    except Exception as error:   
        return False

小梅同学分别从

http://www.data5u.com/http://www.66ip.cn/http://www.goubanjia.com/https://www.kuaidaili.comhttp://www.ip3366.net/free/, http://ip.jiangxianli.com/, http://www.89ip.cn/index.html, http://www.xiladaili.com/ 这几个网上上采集到了350个免费代理ip。方法一,测试代理ip全部通过,目前还没找到造成这种测试结果的原因(方法不对? or 代理ip无效?,后续如果有近一步进展,会同步文档)。方法二,350个免费代理ip,第一次过滤剩下约40个,接着第一次的过滤结果,进行第二次过滤剩下约30个,再次进行第三次过滤剩下约20个。充分说明了免费代理ip的正确性不足10%,也存在一定的不稳定性。

最后,实践证明,方案一最简单有效。哈哈哈~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容