全网代理公开ip爬取(隐藏元素混淆+端口加密)
简述
本次要爬取的网站是全网代理,貌似还是代理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爬取(隐藏元素混淆+端口加密)的更多相关文章
- 无忧代理免费ip爬取(端口js加密)
起因 为了训练爬虫技能(其实主要还是js技能-),翻了可能有反爬的网站挨个摧残,现在轮到这个网站了:http://www.data5u.com/free/index.shtml 解密过程 打开网站,在 ...
- requests 使用免费的代理ip爬取网站
import requests import queue import threading from lxml import etree #要爬取的URL url = "http://xxx ...
- 代理IP爬取,计算,发放自动化系统
IoC Python端 MySQL端 PHP端 怎么使用 这学期有一门课叫<物联网与云计算>,于是我就做了一个大作业,实现的是对代理IP的爬取,计算推荐,发放给用户等任务的的自动化系统.由 ...
- 代理IP爬取和验证(快代理&西刺代理)
前言 仅仅伪装网页agent是不够的,你还需要一点新东西 今天主要讲解两个比较知名的国内免费IP代理网站:西刺代理&快代理,我们主要的目标是爬取其免费的高匿代理,这些IP有两大特点:免费,不稳 ...
- 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)
分析 蚂蚁代理的列表页大致是这样的: 端口字段使用了图片显示,并且在图片上还有各种干扰线,保存一个图片到本地用画图打开观察一下: 仔细观察蓝色的线其实是在黑色的数字下面的,其它的干扰线也是,所以这幅图 ...
- 酷伯伯实时免费HTTP代理ip爬取(端口图片显示+document.write)
分析 打开页面http://www.coobobo.com/free-http-proxy/,端口数字一看就不对劲,老规律ctrl+shift+c选一下: 这就很悲剧了,端口数字都是用图片显示的: 不 ...
- node爬取页面元素
/** * Created by on 2018/12/25. */const http = require("https");const fs = require('fs'); ...
- python爬取网易翻译 和MD5加密
一.程序需要知识 1.python中随机数的生成 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0, ...
- Scrapy爬取美女图片第三集 代理ip(下)
这是我的公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行.现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...
随机推荐
- jsp连接书库DatabaseUtil类
public class DatabaseUtil { private static String driver = ConfigManager.getProperties("driver& ...
- POJ-2996 Help Me with the Game---模拟棋子
题目链接: https://vjudge.net/problem/POJ-2996 题目大意: 给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子 1,棋盘中大写字母表示的是白方棋子,小写是黑方.2 ...
- win10 apache配置虚拟主机后localhost无法使用
win10系统配置虚拟主机1.用记事本或Sublime Text打开httpd.confctrl + f 搜索httpd-vhosts.conf 将#Include conf/extra/httpd- ...
- python json.dumps 中的ensure_ascii 参数引起的中文编码问题
在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u5 ...
- BeautifulSoup重点复习
html = """ <html><head><title>The Dormouse's story</title>< ...
- lsdyna进阶教程-弹性球撞击刚性平板
在lsdyna基础教程中,我们做了一个关于刚性球撞击弹性平板的粒子,现在我们考虑另外一个问题,如果用弹性球撞击刚性地面该怎么做呢?是不是要从头开始建模,操作步骤是不是一样呢?其实很简单,将球和地面的材 ...
- matlab coder 工具箱使用教程
之前一直听说matlab代码可以转C和C++代码,但是一直都没有时间尝试,最近闲着无聊,就想来试试如何转换,上网查了很多资料,照着做下去,发现都有一些问题,之后自己琢磨了很久,终于将一个很简单的例子给 ...
- github的简单使用
查了好多入门教程(图文并茂可以了解一些基本步骤),感觉逻辑欠缺,(很多东西跟着教程了解会用了,不了解逻辑,只是会了这一个,其他的还是很蒙),来一起理一理把 1.第一步下载并注册(这个自己解决) 2.用 ...
- Java多线程之生产者消费者
生产者和消费者的实例: 商品类:/** * 商品类 * */public class Goods { final int MAX_NUMBER = 30; // 最大数量 final in ...
- [NOIp 2009]靶形数独
Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他 ...