簡體   English   中英

如何從網頁中獲取未知長度的字符串

[英]how can I get a unknown length string from a webpage

我需要在 perl 中獲取一個字符串,其長度每天都在變化。 看下面的URL內容

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /isos/preFCS5.3/LATESTGOODCVP</title>
</head>
<body>
<h1>Index of /isos/preFCS5.3/LATESTGOODCVP</h1>
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last      modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/back.gif" alt="[DIR]"></td><td><a href="/isos/preFCS5.3/">Parent   Directory</a></td><td>&nbsp;</td><td align="right">  - </td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="CVP-LATEST-5.3.0.37.iso">CVP-LATEST-5.3.0.37.iso</a></td><td align="right">19-Jul-2011 03:32  </td><td align="right">816M</td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="ChangeLog-LATEST.2011-07-19-03h.30m.01s">ChangeLog-LATEST.2011-07-19-03h.30m.01s</a></td><td align="right">19-Jul-2011 03:32  </td><td align="right"> 16K</td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="is.iso">is.iso</a></td><td align="right">19-Jul-2011 03:32  </td><td align="right">816M</td></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="md5SUM">md5SUM</a></td><td align="right">19-Jul-2011 03:32  </td><td align="right">111 </td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
<address>Apache/2.2.3 (Red Hat) Server at www.google.com Port 80</address>
</body></html>

您可以看到一個名為“CVP-LATEST-5.3.0.37.iso”的字符串。 我需要把它變成$name。 字符串 CVP-LATEST-5.3.0.37.iso 每天都會不斷變化,比如 CVP-LATEST-5.3.0.39.iso 或 CVP-LATEST-5.3.39a.iso 或 CVP-LATEST-6.1.iso 或 CVP-LATEST- 6.23.23.112.iso。

有什么辦法可以得到這個嗎?

這是代碼

use strict;
use warnings;
use LWP::Simple;

my $oldVersion = CVP-LATEST-5.3.0.37.iso;
my $url        = 'http://www.google.com/isos/preFCS5.3/LATESTGOODCVP/';

my $newPage = get($url)
or die "Cannot retrieve contents from $url\n";

if ( $newPage =~ /href=\"CVP-LATEST-5\.3\.0\.(\d\d)/ ) {
my $version = $1;

if ( $version != $oldVersion ) {
    my $status = getstore($url . "CVP-LATEST-5.3.0.$version.iso",
                          "CVP-LATEST-5.3.0.$version.iso");
} else {
    print "Already at most recent version\n";
}

} else {
die "Cannot find version tag in contents from $url\n";
}

在這里,如果您看到代碼,它僅在 5.3.0."XX" 之后獲得數字(xx),並且已知長度為 2。

無論如何我可以更改它,以便它可以讀取整個文件名,即。 CVP-LATEST-XXXXXX*.iso 然后和$oldversion比較一下?

請注意字符串“CVP-LATEST-”和“.iso”保持不變,但后面的數字會發生變化並且還可以包含字母。 另請注意,URL 內容中還有一個名為 is.iso 的文件。 我不想得到那個。

當您想要解析 HTML 時,您應該使用知道如何解析 HTML 的模塊。

您的問題經常被問到:

perldoc -q url

How do I extract URLs?

use HTML::SimpleLinkExtor;
...
my $extor = HTML::SimpleLinkExtor->new();
$extor->parse($newPage);
my($version) = grep /^CVP-LATEST-.*\.iso/, $extor->href;

嘗試

if ( $newPage =~ /href=\"CVP-LATEST-(.*?)\.iso\"/ ) {
    my $name = "CVP-LATEST-${1}.iso";

$name包含整個文件名。

html 正則表達式的秘密,而不是雙引號

/href="([^"]*)"/i

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM