我正在尝试创建一个简单的scraper,我正在使用getstore(),但是当在IF语句中使用时,scirpt将不会创建.txt文件。我在那里做错了什么?
谢谢,
Carlos N。
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
my $url;
my $content;
print "Enter URL:";
chomp($url = <STDIN>);
$content = get($url);
if ($content =~ s%<(style|script)[^<>]*>.*?</\1>|</?[a-z][a-z0-9]*[^<>]*>|<!--.*?-->%%g) {
$content = getstore($content,"../crawled_text.txt");
}
die "Couldn't get $url" unless defined $content;
答案 0 :(得分:2)
来自LWP :: Simple文档:
我的$ code = getstore($ url,$ file)
获取由URL标识的文档并将其存储在文件中。该 返回值是HTTP响应代码。
您的第一个参数是剥离的HTML文件,可能不是URL。您可以在代码中使用调试器或打印语句来了解有关变量内容以及程序是否进入if块的更多信息。
答案 1 :(得分:0)
getstore
将URL作为参数并将其存储到文件中。你想要做的只是将内容存储在一个文件中,所以改为使用它
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use Path::Tiny;
my $url = shift || "https://perl.org";
my $content = get($url) or die "Couldn't get $url" ;
if ($content =~ s%<(style|script)[^<>]*>.*?</\1>|</?[a-z][a-z0-9]*[^<>]*>|<!--.*?-->%%g) {
my $crawled_text = path("../crawled_text.txt");
$crawled_text->spew_utf8($content)
}
我还进行了一些小样式更改和Path::Tiny
以将内容保存到文件中。如果您愿意,可以使用默认的open
和print
(或say
)。使用shift
还允许从命令行将URL作为参数,这比提示用户更加惯用。