Chinaunix
标题:
抓網頁程式
[打印本页]
作者:
shihyu
时间:
2006-10-06 13:34
标题:
抓網頁程式
#! /usr/bin/perl
use strict;
# 使用 IO::Socket 模組
use IO::Socket;
# 取得命令列中的網頁位址,放入 $url 中
my $url=shift || die "您沒有輸入 url 網址!\n";
# 比對網頁位址是否合乎格式?
my ($host, $file) = $url =~ m!http://([^/]+)(/[^\#]*)!; #(註1)
# 若比對正確,才抓取
if ($host) {
# 產生一個 IO::Socket::INET 物件
my $socket = IO::Socket::INET->new(
PeerAddr => $host, # 指定主機位址
PeerPort => 'http(80)' # 指定 port 號
);
# 針對 $socket 寫入,此動作形同對 $host 主機提出網頁檔 $file 的要求
print $socket "GET $file HTTP/1.0\n\n";
# 只要由 $socket 讀到一列資料,就處理之
while(my $line=<$socket>) {
# 把 CR (^M) 換掉
$line =~ s/\r//g;
# 顯示該列內容 (註2)
print $line;
}
}
复制代码
使用法:
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>; 我改成這樣好像沒辦法~~
懂得朋友可以教一下嘛
謝謝
作者:
shihyu
时间:
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
謝謝
作者:
兰花仙子
时间:
2006-10-06 16:24
自主研究的精神不错!
这个抓网页,用LWP::Simple最简单了,一个陈述就搞定:P
作者:
Namelessxp
时间:
2006-10-06 16:43
原帖由
兰花仙子
于 2006-10-6 16:24 发表
自主研究的精神不错!
这个抓网页,用LWP::Simple最简单了,一个陈述就搞定
同意,对大部分没保护的,getstore足够了
作者:
legend9
时间:
2006-10-07 17:26
chomp($_ = <STDIN>);
my ($url, $save_as);
if (/(.*)?\s*>\s*(.*)?/) {
($url, $save_as) = ($1, $2);
}
else {
die("您沒有輸入 url 網址!\n");
}
print "$url $save_as";
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2