免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1833 | 回复: 4
打印 上一主题 下一主题

抓網頁程式 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-06 13:34 |只看该作者 |倒序浏览
  1. #! /usr/bin/perl

  2. use strict;

  3. # 使用 IO::Socket 模組
  4. use IO::Socket;

  5. # 取得命令列中的網頁位址,放入 $url 中
  6. my $url=shift || die "您沒有輸入 url 網址!\n";

  7. # 比對網頁位址是否合乎格式?
  8. my ($host, $file) = $url =~ m!http://([^/]+)(/[^\#]*)!;  #(註1)

  9. # 若比對正確,才抓取
  10. if ($host) {

  11.         # 產生一個 IO::Socket::INET 物件
  12.         my $socket = IO::Socket::INET->new(
  13.                 PeerAddr => $host,                        # 指定主機位址
  14.                 PeerPort => 'http(80)'                # 指定 port 號
  15.         );

  16.         # 針對 $socket 寫入,此動作形同對 $host 主機提出網頁檔 $file 的要求
  17.         print $socket "GET $file HTTP/1.0\n\n";

  18.         # 只要由 $socket 讀到一列資料,就處理之
  19.         while(my $line=<$socket>) {

  20.                 # 把 CR (^M) 換掉
  21.                 $line =~ s/\r//g;

  22.                 # 顯示該列內容 (註2)
  23.                 print $line;

  24.         }

  25. }
复制代码



使用法:

1. 存成 wget.pl

2. chmod +x wget.pl

3. ./wget.pl http://linux.tnc.edu.tw/techdoc/FSF.htm > FSF.htm







這程式是在 command line 下執行的~~但我把它轉成執行文件 , 下面代碼要怎麼修改


# 取得命令列中的網頁位址,放入 $url 中
my $url=shift || die "您沒有輸入 url 網址!\n";



my $url = <STDIN>; 我改成這樣好像沒辦法~~

懂得朋友可以教一下嘛

謝謝

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
2 [报告]
发表于 2006-10-06 14:50 |只看该作者
chomp(my $url= <STDIN>);

改成這樣可以 , 但我現在問題是輸入下面這一段

http://linux.tnc.edu.tw/techdoc/FSF.htm > FSF.htm

無法產生FSF.htm


應該是這兩個關係

my $url=shift || die # 原本在command line 下

chomp(my $url= <STDIN>) shift || die ;   #現在把它轉成執行文件 改成這樣無法編譯@@

請問要如果改shift || die 才能在產生出FSF.htm

謝謝

论坛徽章:
0
3 [报告]
发表于 2006-10-06 16:24 |只看该作者
自主研究的精神不错!
这个抓网页,用LWP::Simple最简单了,一个陈述就搞定:P

论坛徽章:
0
4 [报告]
发表于 2006-10-06 16:43 |只看该作者
原帖由 兰花仙子 于 2006-10-6 16:24 发表
自主研究的精神不错!
这个抓网页,用LWP::Simple最简单了,一个陈述就搞定


同意,对大部分没保护的,getstore足够了

论坛徽章:
0
5 [报告]
发表于 2006-10-07 17:26 |只看该作者
  1. chomp($_ = <STDIN>);

  2. my ($url, $save_as);

  3. if (/(.*)?\s*>\s*(.*)?/) {
  4.         ($url, $save_as) = ($1, $2);
  5. }
  6. else {
  7.         die("您沒有輸入 url 網址!\n");
  8. }

  9. print "$url $save_as";
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP