【问题标题】:Getting IPs from a .html file从 .html 文件中获取 IP
【发布时间】:2020-06-05 20:46:02
【问题描述】:

他们是一个带有 socks4 在线代理的网站,我在代理链程序中使用它。我没有手动输入新的 IP,而是试图自动化这个过程。我使用 wget 将其转换为我的主目录上的 .html 文件,这是我 cat 文件时的一些输出:

</font></a></td><td colspan=1><font class=spy1>111.230.138.177</font> <font class=spy14>(Shenzhen Tencent Computer Systems Company Limited)</font></td><td colspan=1><font class=spy1>6.531</font></td><td colspan=1><TABLE width='13' height='8' CELLPADDING=0 CELLSPACING=0><TR  BGCOLOR=blue><TD  width=1></TD></TR></TABLE></td><td colspan=1><font class=spy1><acronym title='311 of 436 - last check status=OK'>71% <font class=spy1>(311)</font> <font class=spy5>-</font></acronym></font></td><td colspan=1><font class=spy1><font class=spy14>05-jun-2020</font> 23:06 <font class=spy5>(4 mins ago)</font></font></td></tr><tr class=spy1x onmouseover="this.style.background='#002424'" onmouseout="this.style.background='#19373A'"><td colspan=1><font class=spy14>139.99.104.233<script type="text/javascript">document.write("<font class=spy2>:<\/font>"+(a1j0e5^q7p6)+(m3f6f6^r8c3)+(a1j0e5^q7p6)+(t0b2s9^y5m3)+(w3c3m3^z6j0))</script></font></td><td colspan=1>SOCKS5</td><td colspan=1><a href='/en/anonymous-proxy-list/'><font class=spy1>HIA</font></a></td><td colspan=1><a href='/free-proxy-list/CA/'><font class=spy14>Canada</

如您所见,IP 通常后跟一个 spy[0-19]> 。我尝试使用以下代码用 awk 解析出实际 IP:

awk '/^spy/{FS=">";  print $2 } file-name.html

这是有问题的,因为它们会在 IP 之后出现一堆其他的东西,而且我猜锚点在一行的开头起作用?无论如何,我想知道是否有人可以给我任何关于如何使用 awk 解析 IP 地址的想法。我刚开始学习awk,很抱歉这个菜鸟问题。谢谢

【问题讨论】:

  • 恕我直言,专家总是建议使用 html 解析器来解析 html 文件,因此请您使用 python 或 perl 的相应模块。

标签: html linux awk text-parsing streamline


【解决方案1】:

使用适当的 XML/HTML 解析器和 表达式:

xidel -se '(//td[@colspan=1]/font[@class="spy1"])[1]/text()' file.html

 输出:

111.230.138.177  

或者如果不是第一个 xpath 匹配的时间:

xidel -se '//td[@colspan=1]/font[@class="spy1"]/text()' file.html |
   perl -MRegexp::Common -lne 'print $1 if /($RE{net}{IPv4})/'

【讨论】:

    【解决方案2】:

    AWK 非常适合破解 IP 地址:

    gawk -v RS="spy[0-9]*" '{match($0,/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/); ip = substr($0,RSTART,RLENGTH); if (ip) {print ip}}' file.html
    

    结果:

    111.230.138.177
    139.99.104.233
    

    解释。

    如果您希望记录中断包含正则表达式,您必须使用 GAWK

    1. 我们使用 RS 变量中的正则表达式将文件分成包含一个 IP 地址的行。

    2. match 函数在整行中查找第二个正则表达式。正则表达式是从 1 到 3 个数字的 4 组,由一个点(IP 地址)分隔。

    3. 然后,减法函数从整行 ($0) 中检索从 RSTART(搜索的正则表达式的开头)开始的 RLENGTH 长度的片段。

    4. IF 检查结果是否有值,如果有则打印。这可以防止结果中出现空行。

    这种处理 IP 地址的方法与文件的正确性无关,它不必是 html。

    【讨论】:

    • 感谢您阐明实际代码。 awk 和 reflex 对我来说真是令人头疼。
    【解决方案3】:

    这里已经提供了解决方案,我宁愿为未来的读者使用 实用程序提供不同的解决方案。

    egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file.html
    

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2013-10-29
      • 1970-01-01
      • 2013-12-04
      • 2013-07-22
      • 2014-05-08
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多