Как я могу легко извлечь этот расширенный URL-адрес данных?

0

Я пытаюсь проанализировать HTML-страницу для URL-адреса, который определяется как data-expanded-url. Существует только один URL-адрес для извлечения и только один data-expanded-url. Вот основная часть веб-страницы, где происходит все, что я делаю:

<p class="js-tweet-text tweet-text">The Air <strong>Jordan</strong> 11 Retro
<strong>Low</strong> &#39;<strong>Nightshade</strong>&#39; is <strong>now available</strong>
    <a href="http://tt.co/5w574TicgS" rel="nofollow" dir="ltr" data-expanded-url="http://swoo.sh/1fKCmCB" class="twitter-timeline-link" target="_blank" title="http://swoo.sh/1fKCmCB" >
        <span class="tco-ellipsis"></span>
        <span class="invisible">http://</span>
        <span class="js-display-url">swoo.sh/1fKCmCB</span>
        <span class="invisible"></span><span class="tco-ellipsis">
        <span class="invisible">&nbsp;</span></span>
    </a>
    <a href="http://tt.co/Ug4qjrW9DD" class="twitter-timeline-link" data-pre-embedded="true" dir="ltr" >pic.twitter.com/Ug4qjrW9DD</a>
</p>

Это часть этого раздела с data-expanded-url:

<a href="http://tt.co/5w574TicgS" rel="nofollow" dir="ltr" data-expanded-url="http://swoo.sh/1fKCmCB"'

Как я могу легко извлечь этот data-expanded-url с чем-то вроде Mojo :: DOM или HTML :: Parser или XPath?

  • 0
    Мне пришлось изменить t.co на tt.co, потому что SO не разрешит этот домен ни в одном тексте, включая буквальный текст. :(

2 ответа

0

Здесь пример Mojo :: DOM:

use Mojo::DOM;

my $html = do { local $/; <DATA> };

my $dom = Mojo::DOM->new( $html );

say $dom
    ->find( 'a.twitter-timeline-link' )
    ->map( attr => 'data-expanded-url' )
    ->grep( sub { defined } )
    ->join( "\n" );
0

Вот код, который вам нужен:

use WWW::Mechanize;
use HTML::TreeBuilder::XPath;

my $mech = WWW::Mechanize->new();

my $url = "https://twitter.com/search?q=from%3Anikestore%20%22jordan%22%20%22nightshade%22%20%22low%22%20%22now%20available%22%20since%3A2014-5-2&src=typd";

$mech->get($url);

my $tree = HTML::TreeBuilder::XPath->new_from_content( $mech->content() );

my ($link) = $tree->findvalues('//p[ @class =~ /\btweet-text\b/ ]/a[1]/@data-expanded-url');

$tree->delete();

print $link, "\n";
  • 0
    Спасибо, что работает, чтобы получить t.co, до которого в этом случае прекрасно работает! Но есть ли способ получить data-expanded-url="http://swoo.sh/1fKCmCB" после него, но все же большое спасибо, пока это будет работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню