亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 37903 | 回復(fù): 132
打印 上一主題 下一主題

奔潰中,請教一個關(guān)于perl腳本模式匹配的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-07-24 18:40 |只看該作者 |倒序瀏覽
本帖最后由 yhyhh 于 2011-07-26 12:22 編輯

小女子編寫了一段perl腳本,來調(diào)用 "http://www.ip138.com:8080/search.asp" 進行 手機號碼歸屬地查詢。包含查詢結(jié)果的網(wǎng)頁內(nèi)容被存入一個字符串中,本人期望只提取手機號碼歸屬地這一項字串,不知道如何實現(xiàn)關(guān)于這段字符串的模式匹配。忘高手指教!多謝多謝!

1. 程序源文件
************************************************************
             test_ipcheck_v3.pl
************************************************************
#!/usr/bin/perl -w
use warnings;
use URI;
use LWP;
use Encode;
#用法 ip138search.pl iplist.txt
#以iplist.txt為參數(shù),傳入給變量$filename
my $filename=$ARGV[0];
open(FILE,$filename) || die "faile";
my $line = '0';
while($line=<FILE>){
chomp($line);
my $url=URI->new('http://www.ip138.com:8080/search.asp');
$url->query_form('mobile' => $line);
my $browser = LWP::UserAgent->new;
my $response = $browser->get($url);
if($response -> is_success) {
$value = $response -> decoded_content;
#中文解碼
$out = encode("gb2312",$value);
}
else {
die $response -> status_line;
}
#M模式匹配
$str = $out;
$str =~ m/您查詢的手機號碼段:\s*/;
print "$line \n";
#print "$str";
}
close(FILE);
************************************************************


2. 當(dāng)前程序運行情況:
************************************************************
C:\MyPractice\Perl>Test_ipcheck_v3.pl mobilelist_v1.txt
1340001
************************************************************


3. 期望程序運行情況:
************************************************************
C:\MyPractice\Perl>Test_ipcheck_v3.pl mobilelist_v1.txt
1340001 江蘇 無錫
************************************************************


4. 個人理解的備注:
************************************************************
a. 這段代碼的問題出在模式配置,不知道如何修改才好。求高手賜教!不甚感激!
b. 程序中變量out為包含查詢結(jié)果的網(wǎng)頁內(nèi)容的xml格式信息,而本人希望提取的是下面table中號碼歸屬地的相關(guān)信息,希望能夠與這一段信息進行模式匹配,然后作為運行結(jié)果輸出

<TABLE width=349 border="1" align="center" cellpadding="4" bordercolor=#3366cc style="border-collapse: collapse">
        <TR>
                <TD colspan=2 class=tdc1 align=center height=24 bgcolor=#6699cc>++ ip138.com查詢結(jié)果 ++</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD width="130" align="center" noswap>您查詢的手機號碼段</TD>
                <TD width=* align="center" class=tdc2>1340001</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">卡號歸屬地</td><!-- <td width="130" align="center">卡號歸屬地</TD> -->
<TD class="tdc2" align="center">江蘇&nbsp;無錫</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
<!-- <td width="130" align="center" noswap></td> --><TD width="130" align="center" noswap>卡&nbsp;類&nbsp;型</td><td align="center" class='tdc2'>移動全球通卡</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">區(qū) 號</TD>
<!-- <td></td> --><TD align="center" class=tdc2>0510</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">郵 編</TD>
                <TD align="center" class=tdc2>214000 <a href="http://alexa.ip138.com/post/" target="_blank">更詳細(xì)的..</a></TD></TR>
</TABLE>

論壇徽章:
0
2 [報告]
發(fā)表于 2011-07-24 19:36 |只看該作者
沒看你的模式匹配,但你最后print $line; 豈不是只把iplist.txt里的的值輸出來了!

論壇徽章:
0
3 [報告]
發(fā)表于 2011-07-24 22:16 |只看該作者
沒看你的模式匹配,但你最后print $line; 豈不是只把iplist.txt里的的值輸出來了!
txh_zyy 發(fā)表于 2011-07-24 19:36



   謝謝大俠回復(fù),iplist.txt中的值其實就是輸入的想要查詢的號碼段,這個號碼段 + 號碼歸屬地 就是小女子期望的程序運行輸出結(jié)果了。

這里再補充追問一句,如果print 那個語句改成這樣子呢?目前按照執(zhí)行情況來說,print語句改或不改,執(zhí)行結(jié)果都是一樣的。

哎,那個號碼歸屬地,不知道怎么樣才能把它正確地解析并且輸出出來。

print "$line $1 \n";

論壇徽章:
1
辰龍
日期:2014-05-15 19:37:15
4 [報告]
發(fā)表于 2011-07-24 23:21 |只看該作者
本帖最后由 iakuf 于 2011-07-24 23:22 編輯
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use URI;
  4. use LWP;
  5. use Encode;
  6. use Web::Scraper;

  7. #用法 ip138search.pl iplist.txt
  8. #以iplist.txt為參數(shù),傳入給變量$filename
  9. my $filename=$ARGV[0];
  10. open(FILE,$filename) || die "faile";
  11. my $line = '0';
  12. while($line=<FILE>){
  13.     chomp($line);

  14.     my $url = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=$line";
  15.     my $ua  = LWP::UserAgent->new;
  16.     my $res = $ua->get( $url);  

  17.     if($res->is_success) {
  18.         my $value = $res->decoded_content;
  19.         my $out = encode("utf-8",$value);

  20.         my $scraper = scraper {
  21.             process '/html/body/table[2]/*/td','comment[]' => 'TEXT';
  22.         };  
  23.         my $result = $scraper->scrape( $out );
  24.         print "$result->{comment}[1]\t$result->{comment}[2]\t";
  25.         print "$result->{comment}[3]\t$result->{comment}[4]\n";
  26.     }   
  27.     else {
  28.         die $res->status_line;
  29.     }   
  30. }
  31. close(FILE);
復(fù)制代碼
這個可以達(dá)到你的要求,使用 Web::Scraper 來解碼網(wǎng)頁吧,會容易多了,妹子,想了解這個可以看 http://www.php-oa.com/2010/11/30/perl-web-scraper.html 這個中使用 Web::Scraper 的例子

論壇徽章:
0
5 [報告]
發(fā)表于 2011-07-25 03:06 |只看該作者
本帖最后由 Kitaisky 于 2011-07-25 03:28 編輯

聽樓上的勸;如果非得執(zhí)迷不悟的話,看下面這個:


#!/usr/bin/perl -w

use strict;
use warnings;

{
local $/;

  while (my $lines = <DATA>) {

    $lines =~ /<TD.+?(您查詢的手機號碼段).+?(?:<td.+?<\/td>.+?){3}<td.+?>(.+?)<\/td>\r?\n/is;

    print "$1:\t", "$2\n";

  }
}

## $lines =~ /<TD.+?(您查詢的手機號碼段)     # Start the fun, with $1=您查詢的手機號碼段

## .+?(?:<td.+?<\/td>.+?){3}         ## Bump along 3 pairs of <td>...</td>

##<td.+?>(.+?)<\/td>\r?\n/isx      ## in the 4th pair is my $2= 江蘇&nbsp;無錫


__DATA__
<TABLE width=349 border="1" align="center" cellpadding="4" bordercolor=#3366cc style="border-collapse: collapse">
        <TR>
                <TD colspan=2 class=tdc1 align=center height=24 bgcolor=#6699cc>++ ip138.com查詢結(jié)果 ++</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD width="130" align="center" noswap>您查詢的手機號碼段</TD>
                <TD width=* align="center" class=tdc2>1340001</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">卡號歸屬地</td><!-- <td width="130" align="center">卡號歸屬地</TD> -->
<TD class="tdc2" align="center">江蘇&nbsp;無錫</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
<!-- <td width="130" align="center" noswap></td> --><TD width="130" align="center" noswap>卡&nbsp;類&nbsp;型</td><td align="center" class='tdc2'>移動全球通卡</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">區(qū) 號</TD>
<!-- <td></td> --><TD align="center" class=tdc2>0510</TD>
        </TR>
        <TR class=tdc bgcolor=#EFF1F3>
                <TD align="center">郵 編</TD>
                <TD align="center" class=tdc2>214000 <a href="http://alexa.ip138.com/post/" target="_blank">更詳細(xì)的..</a></TD></TR>
</TABLE>

論壇徽章:
0
6 [報告]
發(fā)表于 2011-07-25 20:56 |只看該作者
本帖最后由 yhyhh 于 2011-07-25 20:58 編輯
這個可以達(dá)到你的要求,使用 Web::Scraper 來解碼網(wǎng)頁吧,會容易多了,妹子,想了解這個可以看  這個中使用 ...
iakuf 發(fā)表于 2011-07-24 23:21


小女子試了大俠介紹的方法,用web::Scraper, 執(zhí)行結(jié)果如下:

C:\MyPractice\Perl>Test_ipcheck_v5.pl mobilelist_v1.txt
Can't locate Web/Scraper.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:\MyPractice\Perl\Test_ipcheck_v
5.pl line 6.
BEGIN failed--compilation aborted at C:\MyPractice\Perl\Test_ipcheck_v5.pl line 6.

看起來是否我的perl安裝文件里缺少了某些類庫了呢?我的電腦系統(tǒng)是windows 7.0, 裝的是activePerl.  version =  ActivePerl-5.14.1.1401-MSWin32-x86-294969.

論壇徽章:
0
7 [報告]
發(fā)表于 2011-07-25 20:59 |只看該作者
小女子試了大俠介紹的方法,用web::Scraper, 執(zhí)行結(jié)果如下:

C:\MyPractice\Perl>Test_ipcheck_v5. ...
yhyhh 發(fā)表于 2011-07-25 20:56


妹子,到cpan上把這個模塊找到,裝上!或者用cpanm裝

論壇徽章:
0
8 [報告]
發(fā)表于 2011-07-25 21:38 |只看該作者
本帖最后由 yhyhh 于 2011-07-25 21:42 編輯
妹子,到cpan上把這個模塊找到,裝上!或者用cpanm裝
txh_zyy 發(fā)表于 2011-07-25 20:59



    目前我找到的:
http://search.cpan.org/~miyagawa ... /lib/Web/Scraper.pm
這個地方的 “Web-Scraper-0.34”, 下載下來了,然后怯怯地說,有點不知所措啊。

我把它放到了這個目錄下:

C:\MyPractice\Web-Scraper-0.34.
perl 的安裝目錄是: C:\MyPractice\Perl\.

然后運行了一下C:\MyPractice\Web-Scraper-0.34\Makefile.pl, 似乎生成了一些新文件。
同時在這個目錄 "C:\MyPractice\Web-Scraper-0.34\lib\Web\" 下,我找到了 Scraper.pm。 接下來怎么辦呢?直接把文件拷貝到 perl的目錄: C:/Perl/lib 下面嗎?

論壇徽章:
0
9 [報告]
發(fā)表于 2011-07-25 21:47 |只看該作者
更新最新進展啊。

我把目錄 C:\MyPractice\Web-Scraper-0.34\lib\Web  CP成 C:\Perl\lib\Web.

第一個報錯解決了,現(xiàn)在運行pl文件,顯示如下結(jié)果:

C:\MyPractice\Perl>Test_ipcheck_v5.pl mobilelist_v1.txt
Can't locate HTML/TreeBuilder/XPath.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:/Perl/lib/Web/Scrape
r.pm line 10.
BEGIN failed--compilation aborted at C:/Perl/lib/Web/Scraper.pm line 10.
Compilation failed in require at C:\MyPractice\Perl\Test_ipcheck_v5.pl line 6.
BEGIN failed--compilation aborted at C:\MyPractice\Perl\Test_ipcheck_v5.pl line 6.

C:\MyPractice\Perl>

論壇徽章:
0
10 [報告]
發(fā)表于 2011-07-25 21:55 |只看該作者
如法炮制,這個問題也解決了,進一步更新最新進展。

C:\MyPractice\Perl>Test_ipcheck_v5.pl mobilelist_v1.txt
Can't locate XML/XPathEngine.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:/Perl/lib/HTML/TreeBuilder/
XPath.pm line 103.
BEGIN failed--compilation aborted at C:/Perl/lib/HTML/TreeBuilder/XPath.pm line 103.
Compilation failed in require at C:/Perl/lib/Web/Scraper.pm line 10.
BEGIN failed--compilation aborted at C:/Perl/lib/Web/Scraper.pm line 10.
Compilation failed in require at C:\MyPractice\Perl\Test_ipcheck_v5.pl line 6.
BEGIN failed--compilation aborted at C:\MyPractice\Perl\Test_ipcheck_v5.pl line 6.

C:\MyPractice\Perl>

接著找?guī)煳募~~~
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP