换ip软件,代理ip软件,更改ip地址-智游代理
您的位置: 首页 > 新闻资讯 > 爬虫代理 > 正文

Java爬虫之匿名代理IP的获取

发布时间:2019年01月24日 来源:本站

爬虫,AI一直是近年来为之关注的焦点,Java以自己独有的严格的语言约束和庞大且成熟的各种框架,成为企业一度的选择,也成为当今码农必知必会的编程语言。


诚然,Java仍然更多地用在WEB开发上,所以学会初级Java爬虫,也是在Java的技能道路上,多看了一处别样的风景。


环境准备:


1. 一个开发工具

2. MAVEN包管理环境

3. JAR:Jsoup、HTTPClient

4. 目标站点:某个代理网站


步骤:


一、 创建WeChat类,并添加JAR包,如下图:

image.png


二、编辑WeChat类,定义一个用于发起HTTP请求的然后返回HTML文本页面的方法:


private String getHTML(String url) {

        CloseableHttpClient httpClient = HttpClients.createDefault();

        HttpGet httpGet = new HttpGet(url);

        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36");

        CloseableHttpResponse response;

        try {

            response = httpClient.execute(httpGet);

            HttpEntity responseEntity = response.getEntity();

            return EntityUtils.toString(responseEntity, "utf-8");

        } catch (IOException e) {

            e.printStackTrace();

        }

        return "";}


1、如上图所示,使用HTTPClient创建Http发起者,使用HttpGet,创建GET请求的对象,封装该对象,并使用HTTPClient将其发送到目标站点,获得返回值类型为HTTPResponse,对该响应使用EntityUtils工具统一格式化编码后,将其返回。

PS:被EntityUtils工具处理后,该响应不再为HTTPResponse对象,而是进行了编码后的该Response对象的文本。类型为String。


三、对第二步中的方法进行测试,确保其正确无误,测试及结果如下:

image.png


四、承接第二步,我们继续编写用于解析HTML文本的方法,在第二步中我们使用HttPClient发起了GET请求,这里,我们要使用Jsoup解析HTML文本,通过对根节点和子节点的解析,准确获取目标信息,代码如下:

private void doParser(String html) {

        Document document = Jsoup.parse(html);

        Elements elements = document.select("tr.odd");

        for (Element element : elements) {

            String context = element.getAllElements().select("td").text();

            if (context.contains("高匿")) {

                int index_ip = context.indexOf(" ");

                String ip_text = context.substring(0, index_ip);

                String sub_string = context.substring(index_ip, context.length());

                sub_string = sub_string.trim();

                int index_port = sub_string.indexOf(" ");

                String port_text = sub_string.substring(0, index_port);

                System.out.println(ip_text + ":" + port_text);

            }

        }}

如上所示:定义了名为doParser()的无返回值方法,以String类型的形参HTML为目标,使用Jsoup.parser()方法,将其转化为Document对象,使用select() CSS选择器,查找该HTML中所有的class为“odd”的标签(在该网页中:class为“odd”的标签和没有class的标签是一半一半所以这里只是选择了当前网页的一半的IP,但这拿来使用足矣)。

Select()选择器查找到class为odd的tr标签后,返回Elements对象,使用for each循环遍历得到该Elements中的所有单个element,使用if过滤掉非高匿的IP,从此处开始,正式进入本文的核心环节,也是爬虫的难点所在信息提取!

信息提取详解:

在if条件句中,首先打印出过滤了非高匿IP后的信息,如图:

image.png


诚然,没有价值的信息很多,我们需要做文本清洗,剥离出有价值的IP和端口必要信息,将其他繁杂信息舍去。


一、IP提取

分析单行文本可知,若想提取出IP,该行首次出现的“ ”(空格)符号是分割的重点,此处我们使用indexOf()方法,获得第一次出现的“ ”(空格)符号的下标所在,再根据下标,使用substring()方法,将其剥离出来,如图:

image.png


这样我们就拿到了IP地址;


一、 端口号的获取


原本的思路是在API文档中找到一个可以查找当前字符串中某一字符第二次出现的位置并返回下标,然而并没有找到,不是返回最后一次的就是返回第一次的,我百思不得解,一个final的String类竟然不会有这样的方法?为何?这说明该类下的所有已发布方法足矣处理任何String的问题,所以,我开始尝试用不相干的方法,制造合理的利用条件,思路如下:

image.png


首先我们来看,在第一步剥离了IP地址后,如果想再次使用IndexOf()方法这样去返回第一个“ ”(空格)字符的下标,然后再根据获得的下标切割去得到关键信息的话,显然IP地址是不应该再存在的,因为在IP地址和port之间已经有一个 “ ”(空格)字符了。所以解决办法第一步,调用substring()方法,使获得的第一个“ ”(空格)字符的下标作为切割的起始下标,字符串的长度为末尾下标,这样我们就得到了一个新的字符串,如下:

image.png

     

但是这仍然不是最适合的剥离环境,因为根据“ ”(空格)字符的下标作为判断依据的话,那么我们还要除去首位的空格(不难发现,每一个端口之前是有一个空格的,仔细看图),调用String.trim()方法,除去字符串首位的空格,得到全新的完美字符串,这时再使用提取IP时的方法就可以得到关于IP和Port的信息,如图:

image.png


今天的分享就到这里,希望对大家有所帮助。

按字母排序文章

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

相关文章内容简介

1 爬虫所需要的代理IP究竟是啥

在爬取某些网站时,我们经常会设置代理IP来避免爬虫程序被封。我们获取代理 IP 地址方式通常提取国内的知名 IP 代理商(如西刺代理,快代理,无忧代理等)的免费代理。这些代理商一般都会提供透明代理,匿名代理,高匿代理。那么这几种代理的区别是什么?我们该如何选择呢?本文的主要内容是讲解各种代理 IP 背后的原理。1 代理类型代理类型一共能分为四种。除了前面提到的透明代理,匿名代理,高匿代理,还有混淆代理。从安全程度来说,这四种代理类型的排序是 高匿 > 混淆 > 匿名 > 透明。2 代理原理代理类型主要取决于代理服务器端的配置。不同配置会形成不同的代理类型。在配置中,这三个变量 REMOTE_ADDR,HTTP_VIA,HTTP_X_FORWARDED_FOR 是决定性因素。1) REMOTE_ADDRREMOTE_ADDR 表示客户端的 IP,但是它的值不是由客户端提供的,而是服务器根据客户端的 IP 指定的。如果使用浏览器直接访问某个网站,那么网站的 web 服务器(Nginx、Apache等)就会把 REMOTE_ADDR ... [阅读全文]

2 为什么爬虫需要代理IP?

在爬虫的过程中,我们经常会遇见很多网站采取了防爬取技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力,所以你一直用同一个代理IP爬取这个网页,很有可能IP会被禁止访问网页,所以基本上做爬虫的都躲不过去IP的问题,需要很多的IP来实现自己IP地址的不停切换,达到正常抓取信息的目的。通常情况下,爬虫用户自己是没有能力去自己维护服务器或者是自己搞定代理ip的问题的,一来是因为技术含量太高,二来是因为成本太高当然,也有很多人会在网上放一些免费的代理ip,但是从实用性、稳定性以及安全性来考虑,不推荐大家使用免费的ip。因为网上公布的代理ip不一定是可用的,很可能你在使用过程中会发现ip不可用或者已失效的情况。所以现在市面上很多代理服务器应运而生,基本上都能给你提供代理ip的服务。现在,爬虫程序怎么样安全躲避防爬程序,可以说是一个很普遍的需求了。做网络爬虫时,一般对代理IP的需求量比较大。因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制。这样我们在爬取网站时就需要很多代理IP。代理IP的获取,可以... [阅读全文]

热门标签

推荐阅读

  1. 10

    2018-11

    python如何使用http代理

    社会科技发展迅速,相信大家对HTTP代理应该都非常熟悉,它在很多方面都有着极为广泛的应用。首先简单介绍一下,什么是HTTP代理呢?

  2. 29

    2019-01

    新手学习python的方法

    ​Python是一门语法简洁、功能强大、上手简单的计算机编程语言,根据TIOBE最新排名,Python已超越C#,与Java,C,C++成为全球4大流行语言之一。

  3. 04

    2019-07

    爬虫代理IP从哪里来?有什么优缺点?

    随着互联网的迅猛发展,爬虫工作日益重要,而爬虫工作者一般都绕不过代理IP这个问题,为什么呢,这是因为在网络爬虫抓取信息的过程中,抓取频率高过了目标网站的设置阀值,将会被禁止

  4. 10

    2019-06

    爬虫代理IP不够的问题如何解决

    爬虫代理IP不够的问题如何解决?在爬虫工作过程中,经常会被目标网站禁止访问,但又找不到原因,这是令人非常恼火的事情。一般来说,目标网站的反爬虫策略都是依靠IP来标识爬虫的,很

  5. 02

    2019-01

    爬虫IP被禁怎么解决?可以使用代理ip吗

    ​爬虫以前听上去好厉害好神秘的样子,用好了可以成就像Google、百度这样的索索引擎,用不好可以凭借不恰当的高并发分分钟崩掉一个小型网站。

  6. 10

    2018-11

    爬虫怎样设置代理ip池

    在网络迅速发展的今天,互联网企业层出不穷,爬虫工作者也越来越多,大家都知道,代理ip是爬虫工作者的一个有力助手