컬 출력에서 ​​IP:PORT 추출

컬 출력에서 ​​IP:PORT 추출

컬 출력에서 ​​목록 ip:port를 가져오고 싶습니다.

curl https://www.gametracker.com/search/?sort=5&order=ASC

용량이 너무 커서 전체 출력을 게시할 수 없습니다. IP:PORT를 추출해야 하는 부분만 게시할 수 있습니다.

                                <a href="/search/?sort=4&amp;order=ASC">Loc</a>
                        </td>
                        <td class="col_h">
                                <a href="/search/?sort=5&amp;order=DESC">IP:Port</a>▼
                        </td>
                        <td class="col_h">
                                <a href="/search/?sort=6&amp;order=ASC">Server Map</a>
                        </td>
                </tr>
                <tr>
                        <td>
                                20.
                        </td>
                        <td>
                                <a href="/search/swat4/">
                                        <img src="/images/game_icons16/swat4.png" alt="SWAT4"/>
                                </a>
                        </td>
                        <td>
                                <a  href="/server_info/1.12.237.104:10520/">



                                        tejingduiba FR0.67 TEST


                                </a>
                        </td>
                        <td>
                                0/16
                        </td>
                        <td>

                        </td>
                        <td>
                                <a href="/search/_all/CN/">
                                        <img src="/images/flags/cn.gif" alt="" class="item_16x11"/>
                                </a>
                        </td>
                        <td>
                                <span class="ip">1.12.237.104</span><span class="port">:10520</span>
                        </td>
                        <td>
                                Red Library Offices

1.12.237.104:10520다음 과 같은 모든 값을 추출하면 됩니다 .IP:PORT

awk, grep 또는 다른 방법을 사용하여 이를 수행하려면 어떻게 해야 합니까?

답변1

작업은 sum 속성을 가진 모든 노드 쌍의 값을 얻는 것입니다 span. HTML의 노드 아래에 쌍으로 나타납니다.classipporttd

첫 번째 문제는 출력이 curl깨끗한 XML이 아니라는 것입니다. 이 문제는 다음을 사용하여 HTML을 XML로 다시 변환하여 해결할 수 있습니다 xmlstarlet.

curl --silent 'URL' | xmlstarlet format --html

이제 XML 문서를 통해 td관심 있는 모든 노드를 찾을 수 있습니다. 이러한 노드에는 속성을 가진 td하위 노드가 있습니다 span(속성을 가진 다른 형제 노드가 있다고 가정합니다). 이러한 각 노드에 대해 노드의 하위 값을 연결합니다.classipspanclassporttdspan

curl --silent 'URL' | xmlstarlet format --html |
xmlstarlet select --template \
    --match '//_:td[_:span[@class="ip"]]' \
    --value-of 'concat(_:span[@class="ip"], _:span[@class="port"])' -nl

_:이전에는 문서가 기본 네임스페이스를 사용했기 때문에 각 노드 이름이 이상해 보였습니다 .

게임 서버의 현재 상태를 고려하여 출력합니다.

1.12.237.104:10520
1.14.139.78:14567
1.15.235.182:27102
1.117.83.171:27025
1.117.83.171:27026
2.56.96.145:27960
2.56.99.56:9987
2.56.213.77:27015
2.204.29.39:27015
2.204.29.39:27016
3.0.10.0:28960
3.0.242.157:28960
3.6.230.224:27015
3.17.155.136:19274
3.28.115.189:27015

답변2

그리고:

#!/usr/bin/env perl

use strict; use warnings;

use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use feature qw/say/;

my $m = WWW::Mechanize->new(
    autocheck => 0,
    quiet => 1,
);
$m->agent_alias("Linux Mozilla");

$m->get("https://www.gametracker.com/search/?sort=5&order=ASC");
my $tree = HTML::TreeBuilder::XPath->new_from_content( $m->content );
my @arr = $tree->findvalues( '//td/span[@class="ip"]/text() | //td/span[@class="port"]/text()' );
for (my $i=0; $i<$#arr; $i+=2) {
    say $arr[$i] . $arr[$i+1];
}

산출

1.12.237.104:10520
1.14.139.78:14567
1.15.235.182:27102
1.117.83.171:27025
1.117.83.171:27026
2.56.96.145:27960
2.56.99.56:9987
2.56.213.77:27015
2.204.29.39:27015
2.204.29.39:27016
3.0.10.0:28960
3.0.242.157:28960
3.6.230.224:27015
3.17.155.136:19274
3.28.115.189:27015

관련 정보