Regex LWP不工作

Regex LWP不工作,regex,perl,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

我已经用我自己的表达方式尝试过了,以使它与我的项目一起工作。但是看了几个小时的互联网后,我仍然无法让它工作。 尝试下面的代码不是我的,但它只生成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";

当下载的内容不包含任何与正则表达式匹配的文本时,就会发生die。LWP或代码本身没有什么错,只是假设下载将匹配。不过,die语句最好包含错误原因的解释。

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

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


总而言之,这是一个很好的例子,说明了为什么刮屏是个坏主意。您最好使用Amazon的产品API。

运行此脚本时,您会收到什么确切的错误消息?请将错误消息复制/粘贴为文本。图片链接很烦人。用正则表达式解析HTML是一个失败的游戏。格式上的一个小更改可能会破坏您的代码,这就是这里发生的情况。您真正需要的是一个HTML解析器,并使用XPath根据元素的ID查找所需的元素,这里是SalesRank。那是。更好的办法是,与其使用速度慢且容易更改的API来删除页面,不如使用API(如果可用)。@SinanÜnür您能为您的编辑提供一个理由吗?我对那篇文章的措辞不太满意,但我不确定完全删除它是正确的解决方案。只是我的手机浏览器。我想它不支持这种父权制的改变。谢谢你的解释。