LWP无法正常工作

时间:2015-02-14 17:17:53

标签: regex perl

使用我自己的表达式尝试使用它来使用我的项目。但经过几个小时的互联网搜索后,我仍然无法让它上​​班。 尝试下面的代码(不是我的),但它只产生" die"声明。我自己的代码(这里的另一个问题)只返回"按任意键..."我做错了什么?

#!/usr/bin/perl -w
# cookbook-rank - find rank of Perl Cookbook on Amazon

use LWP::Simple;

my $html = get("http://www.amazon.com/exec/obidos/ASIN/1565922433")
  or die "Couldn't fetch the Perl Cookbook's page.";
$html =~ m{Amazon\.com Sales Rank: </b> ([\d,]+) </font><br>} || die;
my $sales_rank = $1;
$sales_rank =~ tr[,][]d;    # 4,070 becomes 4070
print "$sales_rank\n";

2 个答案:

答案 0 :(得分:4)

当下载的内容不包含任何与正则表达式匹配的文本时,会发生die。除了下载匹配的假设之外,LWP或代码本身没有任何问题。 (die声明最好包含对出错的解释。)

答案 1 :(得分:0)

自从编写该示例以来,看起来Amazon HTML已经发生了变化。该页面不再包含字符串&#34; Amazon.com Sales Rank&#34;。相反,它现在说&#34;亚马逊畅销书排名:&#34;。

但是您需要查看该页面的HTML源代码。出于某种原因,亚马逊在该标签和包含实际销售排名的行之间插入了超过30个空行。

总而言之,这就是为什么屏幕抓取是一个坏主意的一个很好的例子。建议您使用亚马逊的产品API。