作者jjt (jet)
看板perl
标题Re: [问题] 请问关於抓网页的语法
时间Wed Oct 24 07:54:00 2007
※ 引述《senhuo (努力吧)》之铭言:
: 请问 我想从google搜寻引擎找出所输入的关键字後 所出现的各页面的连结
: 目前做到在google上 自动输入某关键字 如:「台湾」
: 但找出来的资料量非常多,一定也有分成好多页
: 所以 我就将下面分页的连结全部存起来
: 再打算利用程式一页一页去抓每一个相关的网页连结
: 但现在遇到一个问题 搜寻「台湾」後
: 我找了下面第二页的连结,如下
: http://www.google.com.tw/search?q=%E5%8F%B0%E7%81%A3&complete=1&hl=zh-TW&inlang=zh-TW&start=10&sa=N
: 缩网址是 http://0rz.tw/a93cK
: 要利用 get "网址" 这个语法 抓取这一页上的连结时
: 却没办法
: 是不是get语法只能用在固定的网址中
: 如 http://www.pchome.com.tw 或http://xxxx/index.htm
: 经过编译过的符号 会没办法判断出来
: 请问各位高手们
: 遇到这种问题应该如何解决呢
: 有没有别的语法可以支援呢
: 感谢~~ orz
: 程式码如下:
: #! /usr/bin/perl
: #--------------------------------------
: use LWP::Simple;
: use HTML::Parse;
: use HTML::Element;
: use URI::URL;
: use DBI;
: use WWW::Mechanize;
: $http="http://www.google.com/search?q=%E5%8F%B0%E7%81%A3&hl=zh-TW&lr=&start=10&sa=N";
: $htm = get $http;
: print $htm;
我常用的一段程式,拿去用看看吧
use Net::HTTP;
$string = get("
http://xxxx/index.htm");
sub get
{
my $url=shift;
my $retr;
($host,$addr)=$url=~qq#
http://(.*?)/(.*)#;
my $s = Net::HTTP->new(Host => $host) || die $@;
$s->write_request(GET => "/$addr", 'User-Agent' => "Mozilla/4.0");
my($code, $mess, %h) = $s->read_response_headers;
while (1) {
my $buf;
my $n = $s->read_entity_body($buf, 1024);
die "read failed: $!" unless defined $n;
last unless $n;
$retr=$retr.$buf;
}
return $retr;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.197.133
2F:→ jjt:我刚试过可以用 是哪里不行? 10/24 13:43
3F:推 senhuo:j大 真是歹势 ~ 刚试过可以~谢谢啊 版上真多高手... 10/24 14:58