他们是一个在线提供 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后面通常跟着间谍[0-19]> 。我尝试使用以下代码使用 awk 解析实际 IP:
awk '/^spy/{FS=">"; print $2 } file-name.html
这是有问题的,因为他们会在 IP 之后尾随一堆其他东西,我也猜锚点在一行开头工作?无论如何,我想知道是否有人可以给我任何关于如何使用awk解析IP地址的想法。我刚开始学习尴尬,很抱歉菜鸟问题。谢谢
使用正确的 XML/HTML 解析器和 xpath 表达式:
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})/'
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。
我们使用 RS 变量中的正则表达式将文件划分为包含一个 IP 地址的行。
match 函数查找整行中的第二个正则表达式。正则表达式是 4 组,从 1 到 3 个数字,用点(IP 地址(分隔。
然后减去函数从整行($0(中检索从RSTART(搜索的正则表达式的开头(开始的RLENGTH长度片段。
IF 检查结果是否具有值,如果是,则打印该值。这可以防止结果中的空行。
这种脱壳IP地址的方法与文件的正确性无关,它不必是html。
这里已经提供了解决方案,我宁愿使用 egrep 实用程序为未来的读者放置一个不同的解决方案。
egrep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' file.html