Dupliqué possible: strong> J'essaie d'utiliser des expressions régulières à Perl pour analyser une table avec la structure suivante. La première ligne est la suivante: p>
Pouvez-vous donner un exemple d'analyse HTML avec votre analyseur préféré?
Comment puis-je extraire le contenu des fichiers HTML à l'aide de Perl?
#!perl -w
open INPUT_FILE, "<", "FIRST_LINE_OF_OUTPUT.txt" or die $!;
open OUTPUT_FILE, ">>", "PLAYLIST_TABLE.txt" or die $!;
my $lines = join '', <INPUT_FILE>;
print "Hello 2\n";
if ($lines =~ / (\S.*\S) /) {
print "this is 1: \n";
print $1;
if ($lines =~ / <td>(.*)< / ) {
print "this is the 2nd 1: \n";
print $1;
print "the word was: $1.\n";
$Time = $1;
print $Time;
print OUTPUT_FILE $Time;
} else {
print "2ND IF FAILED\n";
}
} else {
print "THIS FAILED\n";
}
close(INPUT_FILE);
close(OUTPUT_FILE);
3 Réponses :
Ne pas utiliser Regexps pour analyser HTML. Il existe un très grand nombre de modules CPLAN qui le font pour vous beaucoup plus efficacement. P>
Dans ce cas, l'analyse demandée est plutôt simple cependant.
@ETher, il me semble que certaines personnes ontiment se torturer. Je ne sais pas pourquoi.
@Sinan: Ma théorie est qu'il existe un type spécial de courbe d'apprentissage avec des regexes: au début, ils semblent si perdus qu'il n'y a rien qu'ils ne peuvent (ou ne devrait pas) faire. Tout ce qui ressemble à un problème d'analyse par conséquent Doit i> être résoluble avec des regexes.
C'est facile: voir http://codepad.org/ QZ9D5BRO si vous voulez essayer de l'exécuter. p> p>
Attendez que vous voyiez les bowvotes, je reçois pour vous dire ceci.
@Nick Parce que c'est le genre d'approche qui gardera un gaspillage de plus de temps et d'efforts encore et encore toujours à la recherche de la bonne regex à chaque fois qu'il faut analyser HTML.
Paysing Json avec des expressions régulières est tout aussi difficile que l'analyse HTML, et pourtant l'une des personnes lors d'une discussion précédente, Stackoverflow.com/questions/1598053/... , qui était la plus dogmatique Utilisation de Regex pour analyse HTML, puis a ensuite approuvé une solution à un problème qui impliquait à l'aide de Regexes pour analyser Json: Stackoverflow.com/questions/1636352/... .
Désolé, le lien ci-dessus est légèrement faux: Stackoverflow.com/questions/1636352/...
Eh bien, je ne peux pas parler pour les autres. Je pense que l'utilisation d'expressions régulières était également une perte de temps dans ce cas. Donc, j'ai ajouté une doublure Perl One en utilisant json.pm code> sur ce fil.
@Kinopiko, il semble que trop peu de gens ne comprennent donc pas la hiérarchie de Chomsky. L'analyse JSON avec des regextes est stupide, même moreso que HTML, puisqu'un analyseur réel est disponible tellement plus simple à utiliser que toute solution de regex à demi-culée pourrait jamais espérer être. Cela démontre la valeur de CS dans l'éducation des programmeurs.
Utilisez HTML :: TableXtract . Vraiment.
#!/usr/bin/perl use strict; use warnings; use HTML::TableExtract; use LWP::Simple; my $file = 'Table3.htm'; unless ( -e $file ) { my $rc = getstore( 'http://www.ntsb.gov/aviation/Table3.htm', $file); die "Failed to download document\n" unless $rc == 200; } my @headers = qw( Year Fatalities ); my $te = HTML::TableExtract->new( headers => \@headers, attribs => { id => 'myTable' }, ); $te->parse_file($file); my ($table) = $te->tables; print join("\t", @headers), "\n"; for my $row ($te->rows ) { print join("\t", @$row), "\n"; }
Je sais que je suis très tard à cette fête, mais le getStore () code> est une très bonne touche pour éviter de marteler sur le serveur de quelqu'un. Super exemple de code.
J'ai voté cela parce que vous avez fourni du code de travail, même si j'étais tenté de ne pas être parce que vous ne pouviez pas résister à la conférence à la fin. Savoir quelle documentation à lire n'est pas si facile.
@Suespence Merci pour le UPVOTE, mais les personnes qui continuent de jeter un modèle après une autre sur les documents HTML dont le format n'est pas sous leur contrôle, il faut rappeler de meilleures solutions. Puis-je vous recommander d'ajouter du code de travail à Votre réponse sur le sujet, au lieu de me confier à ne pas conférer aux autres?
Dupliquer de Stackoverflow.com/Questtions/1406891/...
Ce n'est pas vraiment un duplicata de cette question.
@Kinopiko: assez proche. Quelle est la différence entre vouloir extraire des portions entre TD Tags et Li Tags?
Au fait, vous semblez être confus sur votre tâche: le texte que vous essayez d'analyser est dans les balises. Les cordes que vous voulez sont marquées i>, pour ainsi dire.