d*****g 发帖数: 978 | 1 一个perl的很简单的问题,就是从msn网页中提取信息, 我从其他网站比如yahoo都没
有问题,试过很多次了, 但msn网站的信息就无法读取, 是不是他们的换行键和普通
的不一样?
以下是我的代码
#!/usr/bin/perl
#use strict;
use warnings;
use LWP::Simple;
my $url="http://investing.money.msn.com/investments/equity-options?symbol=US:JCP&optionsdate=11/22/2014";
my $page=get($url);
$page =~ /symbol=126.2.JCP4KMC010000">s+(.*)s+/;
print "yesn";
print "option : $1n";
------------------------------------------------
读取的网址如下:
http://investing.money.msn.com/investments/equity-options?symbo
谢谢 |
y*****1 发帖数: 76 | 2 脚本是不是少了很多斜杠啊?
像是\s+或是\n这种都没有啊。
还是我理解有错误?
输出这样总感觉怪怪的,要拿到怎样的信息才对?
yes
126.2.JCP4KMC010000 |
d*****g 发帖数: 978 | 3 贴过来之后很多斜杠被吃掉了, 我没仔细观察,现在用、代表斜杠。 您做到了吗?您
的输出结果是应该对的,
怎么改的呢?谢谢
刚才实验经验成功了, 不管怎样,包子给您
#!/usr/bin/perl
#use strict;
use warnings;
use LWP::Simple;
my $url="http://investing.money.msn.com/investments/equity-options?symbol=US:JCP&optionsdate=11/22/2014";
my $page=get($url);
$page =~ /symbol=126.2.JCP4KMC010000">、s+(.*)、s+/;
print "yes、n";
print "option : $、n";
【在 y*****1 的大作中提到】 : 脚本是不是少了很多斜杠啊? : 像是\s+或是\n这种都没有啊。 : 还是我理解有错误? : 输出这样总感觉怪怪的,要拿到怎样的信息才对? : yes : 126.2.JCP4KMC010000
|
t****i 发帖数: 88 | 4 lz的code没改, 就把、还原成\
运行结果
yes
option : 126.2.JCP4KMC010000 |
d*****g 发帖数: 978 | 5 昨天一直运行不成功,不知道为什么,也给您一个包子,多谢
#!/usr/bin/perl
#use strict;
use warnings;
use LWP::Simple;
my $url="http://investing.money.msn.com/investments/institutional-ownership?symbol=JCP";
my $page=get($url);
$page =~ /Institutional Ownership (%)\s+.*\s+.*\s+.*(.*)\s+/;
print "yes\n\n";
print "Institutional Ownership (%) $1\n";
【在 t****i 的大作中提到】 : lz的code没改, 就把、还原成\ : 运行结果 : yes : option : 126.2.JCP4KMC010000
|
y*****1 发帖数: 76 | |
d*****g 发帖数: 978 | 7 我现在确定msn的代码肯定有一个特殊的换行键, 换行之后还有一个tab, 因为我获取
之后在notepad和excel中显示的不同,-3.61% 之后没有换行是因为我没有截取到段尾
,理论上说\s+应该包含\n和\t了吧。 如图所示, 大牛给看看怎么回事
代码如下:
open (my $O,">c://。。。。。/out_JCP_OPTION.txt ") or die "Couldn't open: $!
";
my $ticker = "JCP";
my $url="http://investing.money.msn.com/investments/equity-options?symbol=US:$ticker&optionsdate=11/22/2014";
my $page=get($url);
$page =~ /symbol=126.2.JCP4KMC010000">\s+.*\s+.*\s+.*\s+.*\s+(.*)\s+.*\s+.*
\s+.*\s+.*\s+.*\s+.*>(.*)<.*\s+.*\s.*\s+(.*)\s+.*\s.*\s+(.*)\s+.*\s+.*\s+(.*
)\s+.*\s+.*\s+(.*)\s+.*\s+.*\s+(.*)\s+.*\s+.*\s+.*\s+.*\s+(.*)\s+/;
print "yes\n";
print "$1\t$2\t$3\t$4\t$5\t$6\t$7\t$8\n";
print $O "$1\t$2\t$3\t$4\t$5\t$6\t$7\t$8\n"
【在 y*****1 的大作中提到】 : 不用改,就是斜杠那个弄好后直接运行就能出结果。
|
y*****1 发帖数: 76 | 8 这是因为你那些有信息的数字后面的换行都只是\r。
在windows里头默认\r\n才是换行符。所以一般文本编辑器像是notepad在你这个只有\r
的情况下就看不到换行(但是wordpad可以)。
没详细看脚本,这边如果只是指标不治本的话,手动用=~s取代回来就好了。
说起来也真奇怪,\s理论上也应该能匹配\r才对,
但是刚才试了下,发现用Active Perl \s还真不匹配\r,但似乎能匹配\r\n。
所以你那个(.*)\s+的\s+匹配不了1.6\r\r\n后面那些\r\r\n,只能匹配\r\n,
所以最后$1匹配到的是1.6\r,最后留个\r下来。 |
d*****g 发帖数: 978 | 9 多谢多谢, 果然解决了我的问题, 我在您邮箱里发了另一个问题,多谢啦,有包子 |