简述

本次要爬取的网站是全网代理,貌似还是代理ip类网站中比较有名的几个之一,其官网地址: http://www.goubanjia.com/

对于这个网站的爬取是属于比较悲剧的,因为很久之前就写好了代码了只是没写博客总结,结果刚才看的时候发现人家改版了…之前的代码基本不能用了只好重新写…

原来是一个列表页有很多项可以看到的,现在改版成只看前20条了,貌似只有不断的检测抓取不然这东西鸡肋没啥用了,不过还是爬取一下主要是了解下它的反爬策略。

分析过程

列表大概是这个样子的:

还是先ctrl+shift+c选一下可疑元素,先选了一下端口,发现元素的class上还是有可疑元素:

然后源代码中搜索这个端口对应的ip定位:

咦?ip呢?ip哪里去了?

然后ctrl+shift+c选一下页面上的ip:

这都是什么鬼….

好的喝口水冷静一下,上面这种就是通过在正常的元素中插入隐藏元素,然后再给隐藏元素设置乱七八糟的值来达到一种混淆的目的,过滤的话也很简单,只要把非有效内容项去掉就可以了。

这里的混淆元素主要包括下面几种:
1. 隐藏的span标签: <span style="display: inline-block;"></span>

2. 隐藏的p标签: <p style="display: none;">22</p>

3. 空标签span

需要注意有效内容并不是都是用div显示的,也有用span显示的。

那么在选择的时候排除掉空标签和具有display:none样式的标识即可(虽然空标签选中也没什么关系…)。

确定了ip的选取策略端口还没搞定,端口的解密逻辑在这个js中: http://www.goubanjia.com/theme/goubanjia/javascript/pde.js?v=1.0。这种类型的js加密跟无忧代理一模一样,之前已经写过不再赘述。

根据以上分析写出简单的爬取demo:

package org.cc11001100.t1;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; import static java.util.stream.Collectors.toList; /**
* 全网代理: http://www.goubanjia.com/
* ip地址和端口均有反爬处理
*
* @author CC11001100
*/
public class QuanWangProxyIpGrab { public static List<String> downloadAndParse(String url) throws IOException {
Document document = Jsoup.parse(new URL(url), 3000);
return document.select(".table-hover td.ip")
.stream()
.map(e -> {
Elements children = e.children();
Element portElement = children.select(".port").first();
children.remove(portElement);
String ip = children.select(":not(:empty):not([style~=display(\\s*):(\\s*)none(\\s*);])").text().replaceAll("\\s+", "");
int port = decodePort(portElement.attr("class").split("\\s+")[1]);
return ip + ":" + port;
}).collect(toList());
} private static int decodePort(String rawContent) {
String rawNum = Stream.of(rawContent.split(""))
.map("ABCDEFGHIZ"::indexOf)
.map(Object::toString)
.collect(Collectors.joining());
return Integer.parseInt(rawNum) >> 3;
} public static void main(String[] args) throws IOException { downloadAndParse("http://www.goubanjia.com/").forEach(System.out::println); } }

全网代理公开ip爬取(隐藏元素混淆+端口加密)的更多相关文章

  1. 无忧代理免费ip爬取(端口js加密)

    起因 为了训练爬虫技能(其实主要还是js技能-),翻了可能有反爬的网站挨个摧残,现在轮到这个网站了:http://www.data5u.com/free/index.shtml 解密过程 打开网站,在 ...

  2. requests 使用免费的代理ip爬取网站

    import requests import queue import threading from lxml import etree #要爬取的URL url = "http://xxx ...

  3. 代理IP爬取,计算,发放自动化系统

    IoC Python端 MySQL端 PHP端 怎么使用 这学期有一门课叫<物联网与云计算>,于是我就做了一个大作业,实现的是对代理IP的爬取,计算推荐,发放给用户等任务的的自动化系统.由 ...

  4. 代理IP爬取和验证(快代理&西刺代理)

    前言 仅仅伪装网页agent是不够的,你还需要一点新东西 今天主要讲解两个比较知名的国内免费IP代理网站:西刺代理&快代理,我们主要的目标是爬取其免费的高匿代理,这些IP有两大特点:免费,不稳 ...

  5. 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)

    分析 蚂蚁代理的列表页大致是这样的: 端口字段使用了图片显示,并且在图片上还有各种干扰线,保存一个图片到本地用画图打开观察一下: 仔细观察蓝色的线其实是在黑色的数字下面的,其它的干扰线也是,所以这幅图 ...

  6. 酷伯伯实时免费HTTP代理ip爬取(端口图片显示+document.write)

    分析 打开页面http://www.coobobo.com/free-http-proxy/,端口数字一看就不对劲,老规律ctrl+shift+c选一下: 这就很悲剧了,端口数字都是用图片显示的: 不 ...

  7. node爬取页面元素

    /** * Created by on 2018/12/25. */const http = require("https");const fs = require('fs'); ...

  8. python爬取网易翻译 和MD5加密

    一.程序需要知识 1.python中随机数的生成 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0, ...

  9. Scrapy爬取美女图片第三集 代理ip(下)

    这是我的公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行.现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...

随机推荐

  1. java Hibernate 处理 oracle xmltype类型

    网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据 xml的详细内容如下: ...

  2. Oracle处理XML字段时遇到的ORA-31013: XPATH 表达式无效问题

    select extractValue(ed.info_id, '/Root/ExpandProfile/PhoneNumber') as phone, extractValue(ed.info_id ...

  3. Hive:insert into table 与 insert overwrite table 区别

    创建测试表,来测试看看测试结果: create table test(name string,pwd string,createdate string)row format delimited fie ...

  4. 深入探究Lua的GC算法(下)-《Lua设计与实现》

    紧接着上一篇文章zblade:深入探究Lua的GC算法(上)-<Lua设计与实现> 这篇文章让我们收尾GC的具体后续操作.转载请标明出处:http://www.cnblogs.com/zb ...

  5. Spring Cloud学习笔记-003

    服务提供者:向注册中心注册服务 1. 新建maven工程,骨架选择quickstart,工程名称:demo-member 2. 加入相关依赖: 3. 编写服务接口: 4. 在src\main\reso ...

  6. disabled OR readonly

    1.对元素设置disabled以及readonly属性 $("#uid").attr("disabled",true); $("#uid") ...

  7. 简述ConCurrentHashMap

    HashMap: 从JDK1.2起,就有了HashMap,HashMap不是线程安全的,多线程操作时需要注意. CurrentHashMap: 在JDK1.5中,引入concurrent包,从此Map ...

  8. Git reset到某一次commit

    下图场景:张三和李四并行开发,张三提交commit1(bc2dd00),李四提交commit2(7f019d2),张三再提交commit3(44d4fc5),如果此时李四revert commit2, ...

  9. 分布式版本管理工具 git常用命令

    Git global setup git config --global user.name "joey" git config --global user.email " ...

  10. Maven 项目管理工具基础知识系列(一)

    一.Maven 简介 Maven 中文意为 " 内行.专家 ",是 Apache 下的一个开源项目,属于纯 Java 开发,并且只是用来管理 Java项目的,它是一款项目管理工具, ...