您的位置:首页 > 新闻资讯 >文章内容
Java爬虫之匿名代理IP的获取
来源:本站 作者:admin 时间:2019-02-25 15:37:16

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


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


环境准备:


1. 一个你使用的很顺手的开发工具,(我用IDEA);

2. MAVEN包管理环境;

3. JAR:Jsoup、HTTPClient;

4. 目标站点:某某代理;

5. 一个已经看过上一期爬虫文章,同样期待着这一期的你;


开工:


一、 创建WeChat类,并添加JAR包;


二、编辑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


本文就向大家介绍到这里了,希望对大家有所帮助!

相关文章内容简介
推荐阅读
  • 31 2019-05
    快速切换ip不影响网络使用

    如果要快速切换ip不影响网络使用,还需要使用IP切换软件的。在如今的信息时代我们无时无刻都在使用互联网,而用来连接互联网的终端设备都会有一个ip地址,主要是用来确认终端设备的具体位

  • 18 2019-05
    私密代理ip的隐藏效果怎样?

    私密代理ip的隐藏效果怎样?目前市场上有许多代理,种类不同效果也是不同的,例如高匿代理,普通代理,独享代理,私密代理ip,长效代理,短效代理等等,这些都是商家根据代理的特点而

  • 23 2019-06
    http代理解决爬虫工作效率问题

    http代理解决爬虫工作效率问题,小规模的数据爬取,效率稍微慢一些影响并不是很大,但对于大规模爬虫来说,效率是最核心的问题,没有效率,就没有意义。没有哪个公司或者个人愿意等一

  • 27 2019-09
    可用的代理服务器地址获取方式

    代理服务器用着用着断了,突然被墙了,这种情况确实让人心烦。但是也没有办法,毕竟如今的打压力度比较严厉,能怎么办呢?还不是只能继续找可用代理服务器跟代理IP。下面这个教程教大家

  • 07 2019-05
    IE内设代理IP上网

    IE内设代理IP上网,这样可以更加顺利的访问一些网站,因为有些网站可能访问比较频繁之后会被限制,但如果在IE内设代理IP上网,就不必担心这个问题了。

  • 13 2019-11
    谈谈代理IP与网络营销的关系

    代理IP是怎么跟网络营销扯上关系的?不少企业利用网络来做推广的时候,像投票、群发、发帖、助力等形式都是需要大量的IP才能够运作起来的,使用代理IP就能够很好的提高工作效率。

在线客服
大客户VIP渠道
点击这里给我发消息
讨论QQ群
HTTP代理IP爬虫
客服电话
13318873961