如何解决爬虫程序返回429

2024-06-08 17:30:25 浏览数 (2)

作为爬虫,在采集数据的过程中我们会遇到很多的状态码,不同的状态码代表不同的意思。那么我们今天就重点来了解下爬虫程序返回429意味着什么? 我们就以淘宝为例进行分析,淘宝的反爬机制大家都懂,不是一般的严格,挂代理是最基本的要求。但是也需要配合更多的反爬策略一起进行才能有理想的效果。我们先来展示下访问淘宝的代码示例。 import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod;

import java.io.IOException;

public class Main { # 代理服务器(产品官网 www.16yun.cn) private static final String PROXY_HOST = “u6887.b70.tp.16yun”; private static final int PROXY_PORT = 31111;

代码语言:javascript复制
public static void main(String[] args) {
    HttpClient client = new HttpClient();
    HttpMethod method = new GetMethod("https://www.taobao.com/");

    HostConfiguration config = client.getHostConfiguration();
    config.setProxy(PROXY_HOST, PROXY_PORT);

    client.getParams().setAuthenticationPreemptive(true);

    String username = "16ABCCKJ";
    String password = "712323";
    Credentials credentials = new UsernamePasswordCredentials(username, password);
    AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);

    client.getState().setProxyCredentials(authScope, credentials);

    try {
        client.executeMethod(method);

        if (method.getStatusCode() == HttpStatus.SC_OK) {
            String response = method.getResponseBodyAsString();
            System.out.println("Response = "   response);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        method.releaseConnection();
    }
}

} HttpClient4.x JSoup JSoup全局代理 Connection Htmlunit Okhttp 在我们挂上代理访问淘宝的时候就返回了超级多的429,如图:

在这里插入图片描述在这里插入图片描述

虽然我们挂的代理高达80并发但是请求还是比较多,超出了并发量,所以几乎都是返回的429。 这是HTTPHTTPS的标准应答模式 ,面对这样的情况我们只有降低程序的并发请求,或者增加更大的并发量。如果不改变就会导致代理通道堵塞,访问的效果就会更差。

0 人点赞