Bea*_*red 1 html perl screen-scraping
我正在教自己Perl,我通过实例学习最好.因此,我正在研究一个简单的Perl脚本,它擦除了一个特定的博客,并发现自己对几个正则表达式语句感到困惑.该脚本查找以下html块:
<dt><a name="2004-10-25"><strong>October 25th</strong></a></dt>
<dd>
<p>
[Content]
</p>
</dd>
... and so on.
Run Code Online (Sandbox Code Playgroud)
这是我正在研究的示例脚本:
#!/usr/bin/perl -w
use strict;
use XML::RSS;
use LWP::Simple;
use HTML::Entities;
my $rss = new XML::RSS (version => '1.0');
my $url = "http://www.linux.org.uk/~telsa/Diary/diary.html";
my $page = get($url);
$rss->channel(title => "The more accurate diary. Really.",
link => $url,
description => "Telsa's diary of life with a hacker:"
. " the current ramblings");
foreach (split ('<dt>', $page))
{
if (/<a\sname="
([^"]*) # Anchor name
">
<strong>
([^>]*) # Post title
<\/strong><\/a><\/dt>\s*<dd>
(.*) # Body of post
<\/dd>/six)
{
$rss->add_item(title => $2,
link => "$url#$1",
description => encode_entities($3));
}
}
Run Code Online (Sandbox Code Playgroud)
如果你有时间更好地帮助我理解,我的问题是:
以下行如何工作:
([^"]*)#锚点名称
以下行如何工作:
([^>]*)#帖子标题
"六"在以下行中的含义是什么:
</ DD>/6)
非常感谢您的帮助!我现在也正在研究自己问题的答案,但希望有人能给我一个提升!
小智 7
以下几行如何运作......
([^"]*)#锚点名称
零或多个不是",被捕获为$ 1,$ 2或其他什么的东西,取决于括号的数量(我们是.
以下几行如何运作......
([^>]*)#帖子标题
零或多个不是>的东西,被捕获为$ 1,$ 2或其他什么.
"六"在以下几行中意味着什么......
</ DD>/6)
x也可以将注释放入正则表达式本身,所以像这样的东西# Post title只是注释.
有关更多/更好的信息,请参阅perldoc perlre.该链接适用于Perl 5.10.如果您没有Perl 5.10,则应该查看Perl版本的perlre文档.