使用Jsoup从页面中提取信息

时间:2014-02-01 08:15:55

标签: java parsing jsoup

我正在尝试使用Jsoup库从here中提取信息。 js元素后无法获取信息。
我在每个td元素上使用Opera DragonFly查看此页面。这是结果:

<td class="t_port">
      <script type="text/javascript">
      //<![CDATA[
        document.write(Socks^GrubMe^51959);
      //]]>
      </script>
     "1080
                "
    </td>

当我使用任何浏览器的视图代码功能时,他返回相同的代码行但没有“1080” - 我正在寻找的信息。当我尝试使用Jsoup获取此页面时,我会采取相同的结果。 js代码或多或少相似。像:

document.write(SmallBlind^NineBeforeZero^64881);

document.write(ProxyMoxy^DexterProxy^29182);

或类似的东西

 document.write(Defender^Agile^57721);

了解这项服务的政策我想这个js代码阻止了这些必要的信息,然后动态地加载它,通过编辑DOM添加添加“1080”类型的信息。 任何建议都抓住这个信息?

P.S:这是我的代码:

Document doc = Jsoup.connect(socks4URL).post();
    Elements ips = doc.select("table.proxytbl td.t_ip");
    for (Element e : ips) {
        System.out.println("e is " + e.text());
    }
    Elements ports = doc.select("table.proxytbl td.t_port");
    for (Element e : ports) {
        System.out.println("port is " + e);
    }

1 个答案:

答案 0 :(得分:1)

第一

我认为该网站完全使用这种技术来阻止像你这样的人刮掉他们的信息。话虽如此,我只是假设你理解这一点并放弃。

第二

此方不会通过ajax加载端口信息。它只是在脚本标记中定义了一些全局变量,并使用按位XOR operator(^)来计算端口号。要了解发生了什么,您需要了解XOR运算符,找到在源中内联加载的小脚本(提示:div中的脚本标记,id =“unetent”)。这是我得到的,但这可能是一个动态生成的脚本,因此它可能因呼叫而异:

<script type="text/javascript">
//<![CDATA[
  BigProxy = 13097;BigGoodProxy = 42249^BigProxy;GrubMe = BigGoodProxy^BigProxy;Defender = 16593^BigGoodProxy;Polymorth = 32164^60129;Xorg = Defender^BigProxy;DexterProxy = Defender^Defender;SmallBlind = 56306^22478;Agile = 7797^61126;Socks = BigProxy^SmallBlind;DontGrubMe = BigProxy^45134;Xinemara = 64225^38807;HttpSocks = Socks^BigGoodProxy;BigBlind = GrubMe^41530;NineBeforeZero = 8868^38743;SmallProxy = HttpSocks^Socks;ProxyMoxy = Polymorth^41915;
//]]>
</script>

现在,您可以解析数据并使用相同的值重新创建变量。只需解析端口字段并解释小XOR计算。例如:

document.write(SmallBlind^BigProxy^47917);

根据上面的脚本SmallBlind = 35900和BigProxy = 13097(经过评估!)

因此微积分为35900 ^ 13097 ^ 47917 = 1080

第三

如果您需要袜子代理列表,只需订阅许多服务中的一个即可使用袜子代理列表:)