jsoup下如何配置使用代理IP
时间:2020-12-12

jsoup是用于获取特定网页站点数据的标准HTML解析程序。使用调用DOM的CSS实现jQuery的操作来提取特定的数据,API简单易用。JSUP的功能:

HTML格式数据解析分析。

DOM或CSS选择器定位可以直接获得数据。

HTML元素、属性、文本之间的直接交互。

其中,部分站点在数据采集过程中会限制爬虫访问,此时需要使用代理IP,为每个http请求分配不同的IP地址,以实现数据快速采集请求。

以下demo实现了关于jsoup下如何配置使用代理IP的简单逻辑描述,可直接参考使用:

import java.io.IOException;

import java.net.Authenticator;

import java.net.InetSocketAddress;

import java.net.PasswordAuthentication;

import java.net.Proxy;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

public class Demo

{

    // 代理验证信息

    final static String ProxyUser = "username";

    final static String ProxyPass = "password";

    // 代理服务器(产品官网 www.16yun.cn)

    final static String ProxyHost = "t.16yun.cn";

    final static Integer ProxyPort = 31111;

    // 设置IP切换头

    final static String ProxyHeadKey = "Proxy-Tunnel";

    public static String getUrlProxyContent(String url)

    {

        Authenticator.setDefault(new Authenticator() {

            public PasswordAuthentication getPasswordAuthentication()

            {

                return new PasswordAuthentication(ProxyUser, ProxyPass.toCharArray());

            }

        });

        // 设置Proxy-Tunnel

        Random random = new Random();

        int tunnel = random.nextInt(10000);

        String ProxyHeadVal = String.valueOf(tunnel);

        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyHost, ProxyPort));

        try

        {

            // 处理异常、其他参数

            Document doc = Jsoup.connect(url).timeout(3000).header(ProxyHeadKey, ProxyHeadVal).proxy(proxy).get();

            if(doc != null) {

                System.out.println(doc.body().html());

            }

        }

        catch (IOException e)

        {

            e.printStackTrace();

        }

        return null;

    }

    public static void main(String[] args) throws Exception

    {

        // 要访问的目标页面

        String targetUrl = ";;

        getUrlProxyContent(targetUrl);

    }

}