Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. my @tag = $tree->look_down( _tag => 'tr', class => qr{bepevenscompletedb} );
  2. for (@tag) {
  3.  
  4. query_element($_);
  5. }
  6.  
  7. sub query_element {
  8.  
  9. my @td_tag = $_[0]->look_down( _tag => 'td' );
  10.  
  11. my $num1 = shift @td_tag; #Get the first td tag
  12. my $num2 = shift @td_tag; # Get the second td tag
  13.  
  14.  
  15. #Making sure first/second td tag has numeric value
  16. $num1 = $1 if $num1->as_text =~ m!(d+)! or die "no match found";
  17. $num2 = $1 if $num2->as_text =~ m!(d+)! or die "no match found";
  18.  
  19.  
  20. #Validating that above value's match the user provided value 5 and 1.
  21. if ( $num1 eq '5' && $num2 eq '1' ) {
  22. say "hurray..!!";
  23.  
  24. #Iterating over rest of the td tag to make sure we get the right link from it.
  25. for (@td_tag) {
  26.  
  27. #Check if contains ABC and than procede to fetch the download href link.
  28. if ($_->look_down(_tag => 'td', class => qr{[c]}, sub {
  29. $_[0]->as_text eq 'ABC';} )
  30. )
  31. {
  32. my $text = $_->as_text;
  33. say "Current node text is: ", $text; #outputs ABC
  34.  
  35. #Now from here how do I get the link I want to extract.
  36. }
  37. }
  38. }
  39. }
  40.  
  41. my $link_obj = $_->look_down(_tag => 'a') # It should look for `a` tag.
  42. say $link_obj->as_text;
  43.  
  44. Can't call method "as_text" on an undefined value.
  45.  
  46. #!perl
  47.  
  48. use Marpa::R2::HTML qw(html);
  49.  
  50. use 5.010;
  51. use strict;
  52. use warnings;
  53.  
  54. my $answer = html(
  55. ( join q{}, <DATA> ),
  56. { td => sub { return Marpa::R2::HTML::contents() },
  57. a => sub {
  58. my $href = Marpa::R2::HTML::attributes()->{href};
  59. return undef if not defined $href;
  60. return [ link => $href ];
  61. },
  62. 'td.c' => sub {
  63. my @values = @{ Marpa::R2::HTML::values() };
  64. if ( ref $values[0] eq 'ARRAY' ) { return $values[0] }
  65. return [ test => 'OK' ] if Marpa::R2::HTML::contents eq 'ABC';
  66. return [ test => 'OK' ] if Marpa::R2::HTML::contents eq 'DEF';
  67. return [ test => '' ];
  68. },
  69. tr => sub {
  70. my @cells = @{ Marpa::R2::HTML::values() };
  71. return undef if shift @cells != 5;
  72. return undef if shift @cells != 1;
  73. my $ok = 0;
  74. my $link;
  75. for my $cell (@cells) {
  76. my ( $type, $value ) = @{$cell};
  77. $ok = 1 if $type eq 'test' and $value eq 'OK';
  78. $link = $value if $type eq 'link';
  79. }
  80. return $link if $ok;
  81. return undef;
  82. },
  83. ':TOP' => sub { return Marpa::R2::HTML::values(); }
  84. }
  85. );
  86.  
  87. die "No parse" if not defined $answer;
  88. say join "n", @{$answer};
  89.  
  90. __DATA__
  91. <table>
  92. <tbody>
  93.  
  94. <tr class="epeven completed">
  95. <td>5</td>
  96. <td>1</td>
  97. <td class="c">ABC</td>
  98. <td class="c">satus</td>
  99. <td class="c"><a href="/path/link">Download</a></td>
  100. </tr>
  101. <tr class="epeven completed">
  102. <td>5</td>
  103. <td>1</td>
  104. <td class="c">status</td>
  105. <td class="c">DEF</td>
  106. <td class="c"><a href="/path2/link">Download</a></td>
  107. </tr>
  108.  
  109.  
  110. </table>
  111.  
  112. use strict;
  113. use warnings;
  114. use HTML::TreeBuilder 5 -weak;
  115. use 5.014;
  116.  
  117. my $tree = HTML::TreeBuilder->new_from_content(<DATA>);
  118.  
  119.  
  120. for my $e ($tree->look_down( _tag => 'a',
  121. sub { my $e = $_[0];
  122. my $tr = $e->parent->parent; ### Could also use ->lineage to search up through the
  123. ### containing elements
  124. return unless $tr->attr('_tag') eq 'tr' and $tr->attr('class') eq 'epeven completed';
  125. return ( $tr->look_down( _tag => 'td', sub { $_[0]->as_text eq '1'; })
  126. and $tr->look_down( _tag => 'td', sub { $_[0]->as_text eq '5'; })
  127. and $tr->look_down( _tag => 'td', class => 'c', sub { $_[0]->as_text eq 'ABC'; })
  128. );
  129. }
  130. )
  131. ) {
  132. say $e->attr('href');
  133. }
  134.  
  135.  
  136. __DATA__
  137.  
  138. <table>
  139. <tbody>
  140.  
  141. <tr class="epeven completed">
  142. <td>5</td>
  143. <td>1</td>
  144. <td class="c">ABC</td>
  145. <td class="c">satus</td>
  146. <td class="c"><a href="/path/link">Download</a></td>
  147. </tr>
  148. <tr class="epeven completed">
  149. <td>5</td>
  150. <td>1</td>
  151. <td class="c">status</td>
  152. <td class="c">DEF</td>
  153. <td class="c"><a href="/path2/link">Download</a></td>
  154. </tr>
  155.  
  156.  
  157. </table>
  158.  
  159. /path/link
  160.  
  161. for my $r ($content =~ m{<tr class="epeven completed">(.*?)</tr>}gs) {
  162. my ($n1, $n2) = $r =~ m{<td>(d+)</td>s*<td>(d+)</td>}g;
  163. next if $n1 != 5 || $n2 != 1;
  164. next if $r !~ m{<td class="c">ABC</td>}g;
  165. my ($link) = $r =~ m{<a href="(.*?)">Download</a>}g;
  166. say $link;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement