全网代理公开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,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...
随机推荐
- 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)
4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...
- tomcat 热替换class
需要在server.xml中做以下配置: 在host节点内加入<Context>标签,reloadable属性设置为true. <Host name="localhost& ...
- uvalive 3635 Pie
https://vjudge.net/problem/UVALive-3635 题意: 有F+1个人要分n个蛋糕,他们得到的蛋糕的面积必须是一样的,但是每个蛋糕必须是整块的蛋糕,而不是有多块蛋糕拼成的 ...
- angular中的路径问题
我们在写项目时会遇到启动页调到引导页,引导页再调到首页, 那我们在用angular框架写这种东西的时候如果我们不细心的话就会遇到问题, 比如说找不到引导页的图片等等. 那我们怎么解决这个问题呢? 首先 ...
- 泡菜的使用pickle
如何实现对列表和字典的写入? 需要将对象流式化,实现对象持久存储,这里用到的事pickle 一.制作泡菜 >>> list1 = ['我',123,3.14,['aaa',1]] # ...
- Android系统框架构
写此本文是为了对Android系统框架有一个整体的认识和了解,对于开发和测试人员脑子里要有整体认识以便对工作有所帮助. 进入正题 首先Android系统架构采用了分层架构的思想,共分为四层由上到下分: ...
- Git的本地仓库与GitHub的远程仓库
gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub.GitHub 是目前为止最大的开源 Git 托管服务,并且还是少数同时提供公共代码 ...
- CentOS下安装yum
在Linux里面依次输入下面的命令: 1,下载最新的yum-3.2.28.tar.gz并解压 wget http://yum.baseurl.org/download/3.2/yum-3.2.28.t ...
- [LeetCode] Merge Two Binary Trees 合并二叉树
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...
- [HNOI 2015]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...