关于解析器的问题。有没有机会在分隔表格的地方捕获一些分隔符...... paser 脚本运行良好。注意 - 我想将数据存储到 MySQL 数据库中。所以有一些分隔符会很棒 - (逗号,制表符或其他一些 - 制表符分隔值或逗号分隔值是可以使用的方便格式......
(这里的数据来自以下站点: http: //192.68.214.70/km/asps/schulsuche.asp ?q=a&a=20 )
lfd 编号。Schul- nummer Schulname Straße PLZ Ort Telefon Fax Schulart Webseite 1 0401 Mädchenrealschule Marienburg, Abenberg, der Diözese Eichstätt Marienburg 1 91183 Abenberg 09178/509210 Realschulen mrs-marienburg.homepage.t-online.de 2 6581 Volksschule Abenberg (Grundschule) Güssschule。2 91183 Abenberg 09178/215 09178/905060 Volksschulen home.t-online.de/home/vs-abenberg 6 3074 Private Berufsschule zur sonderpäd。Förderung, Förderschwerpunkt Lernen, Abensberg Regensburger Straße 60 93326 Abensberg 09443/709191 09443/709193 Berufsschulen zur sonderpädog。Förderung www.berufsschule-abensberg.de
好吧,我需要将这些行分成至少三列 - 获取第一条记录。
名称:Volksschule Abenberg (Grundschule) 街道:Güssübelstr. 2 邮政编码和城镇:91183 Abenberg 传真和电话:09178/215 09178/905060 学校类型:Volksschulen 网站:home.t-online.de/home/vs-abenberg
或者甚至更好——我已经将邮政编码和城镇分成了两个单独的列!?问:这可能吗?
顺便说一句:见第一条记录:(这里我只显示学校的名字)
1 0401 Mädchenrealschule Marienburg, Abenberg, 6 3074 Private Berufsschule zur sonderpäd。Förderung, Förderschwerpunkt Lernen, 阿本斯贝格
名称中有逗号;这是否使创建创建 csv-fomate 的解析器变得困难?
任何想法如何在 Perl 中做到这一点......如果可能的话,那就太好了!关于这个小问题的许多提示-除此之外,一切都很棒且引人入胜!
零
顺便说一句 - 如果你愿意 - 我可以添加代码。这里没问题。
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TableExtract;
use LWP::Simple;
use Cwd;
use POSIX qw(strftime);
my $te = HTML::TableExtract->new;
my $total_records = 0;
my $suchbegriffe = "e";
my $treffer = 50;
my $range = 0;
my $url_to_process = "http://192.68.214.70/km/asps/schulsuche.asp?q=";
my $processdir = "processing";
my $counter = 50;
my $displaydate = "";
my $percent = 0;
&workDir();
chdir $processdir;
&processURL();
print "\nPress <enter> to continue\n";
<>;
$displaydate = strftime('%Y%m%d%H%M%S', localtime);
open OUTFILE, ">webdata_for_$suchbegriffe\_$displaydate.txt";
&processData();
close OUTFILE;
print "Finished processing $total_records records...\n";
print "Processed data saved to $ENV{HOME}/$processdir/webdata_for_$suchbegriffe\_$displaydate.txt\n";
unlink 'processing.html';
die "\n";
sub processURL() {
print "\nProcessing $url_to_process$suchbegriffe&a=$treffer&s=$range\n";
getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'tempfile.html') or die 'Unable to get page';
while( <tempfile.html> ) {
open( FH, "$_" ) or die;
while( <FH> ) {
if( $_ =~ /^.*?(Treffer <b>)(d+)( - )(d+)(</b> w+ w+ <b>)(d+).*/ ) {
$total_records = $6;
print "Total records to process is $total_records\n";
}
}
close FH;
}
unlink 'tempfile.html';
}
sub processData() {
while ( $range <= $total_records) {
getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'processing.html') or die 'Unable to get page';
$te->parse_file('processing.html');
my ($table) = $te->tables;
for my $row ( $table->rows ) {
cleanup(@$row);
print OUTFILE "@$row\n";
}
$| = 1;
print "Processed records $range to $counter";
print "\r";
$counter = $counter + 50;
$range = $range + 50;
$te = HTML::TableExtract->new;
}
}
sub cleanup() {
for ( @_ ) {
s/s+/ /g;
}
}
sub workDir() {
# Use home directory to process data
chdir or die "$!";
if ( ! -d $processdir ) {
mkdir ("$ENV{HOME}/$processdir", 0755) or die "Cannot make directory $processdir: $!";
}
}