分页: 1 / 2
一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-26 23:53
由 formylove2
比如这个网页上有大批rar类型的文件 提供了超级连接 可供直接下载 无登录等限制
当然 也可以是PDF阿 什么的 我想写一个脚本 用wget批量下载 但用什么判断这些页面上的东东呢?
望有高手指条明路
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-26 23:55
由 formylove2
给点提示都行
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 8:12
由 O_O_BOT
分析 href -> grep -> ok
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 9:34
由 eexpress
代码: 全选
cat fetch-link.pl
#!/usr/bin/perl
use LWP::UserAgent;
my $url=shift;
#my $url='http://forum.ubuntu.org.cn/search.php?search_id=newposts';
#my $url='http://doc.linuxpk.com/2970.html';
my $ua=new LWP::UserAgent();
my $re= $ua->get($url);
die if (!$re->is_success);
my $html= $re->content;
#得到页面中所有链接
while($html=~m{<a href=(["'])(.*?)\1.*?>(<.*?/>)*(.*?)</a>}gsi){
#print "$2\t--->$4\n";
my $l=$2; my $t=$4;if($l=~/^http/ and $l!~/com\/$|cn\/$/ and $t!~/^</){print "$l\t--->$t\n";}
}
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 18:22
由 formylove2
代码: 全选
$html=~m{<a href=(["'])(.*?)\1.*?>(<.*?/>)*(.*?)</a>}gsi
#这个正则下来有哪几个变量赋值了?
代码: 全选
$l=~/^http/ and $l!~/com\/$|cn\/$/ and $t!~/^</
#这个是去掉地址中的http com cn 然后找到匹配$l 和$t 的东西?
这两个正则 。。我实在是看不明白
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 19:19
由 formylove2
不过很感谢EE
perl 的LWP 模块 进行页面分析 前面那段网页内容的获取没多大问题
就是后面那些正则分析 提取需要的内容。。哎 真是想破脑袋
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 21:07
由 O_O_BOT
要shell的没
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 21:22
由 eexpress
perl 的正则,天生强大,而且难懂。

Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 21:59
由 formylove2
O_O_BOT, 的 有点玩不明白
./脚本 目标地址 ? 这样运行么? 提示输入Inpu regex 我输入 *.rar 只能下载主页
我现在根据ee的办法 现用perl提取到指定页面的内容 让脚本建个wget的下载list 把指定页面的 链接分析 放到 list中 然后调用wget下载
现在问题就是怎么把指定页面内容里的 <a href= > </a> 中的 指定类型给"正则"出来
对了 我怎么在perl脚本中调用bash里的程序阿?
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 22:46
由 eexpress
调用啊。就是``啊
比如
<a href= > </a> 中的 指定类型给"正则"出来
你试试这注释掉的那句,就知道了。
while($html=~m{<a href=(["'])(.*?)\1.*?>(<.*?/>)*(.*?)</a>}gsi){
#print "$2\t--->$4\n";
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 23:03
由 knowfarway
cat fetch-link.pl
这个是什么东东?我这里木有fetch-link.pl,怎么办?
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 23:24
由 formylove2
$url=
http://www.ouravr.com/bbs/bbs_content.j ... bs_id=1000
比如这个网址
#print "$2\t--->$4\n";
解除注释后 运行
就是没有 下载的那些文件的链接 都是些无关紧要的
我仔细看了下 发现你的正则好像要改下 找到的全部都是 像这样格式的:
<br><a href=xxxxxx>xxxxxr</a>
而页面上放出的下载连接源码 前面都带有http
<br><a href=
http://download.ourdev.cn/bbs_upload245 ... 用资料.rar</a>
只要前面带http的都分析不出来
$2 和$4 对应的是哪段正则的?
悲伤的问一下 为啥我的shell 里显示 $4时都这样子?:���
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 23:27
由 eexpress
就是模式匹配的。那些()嘛。几个()里面的。就是$digit 表示的。
给你一个我整理的变量说明。
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 23:55
由 formylove2
哦 有点眉目了 重点就是正则 你那个开头
["'] 是针对 这样的形式 "xxxxx" 'xxxx' 才匹配 有些连接没有"" 和''
后面的那个(<.*?/>)*(.*?)</a> 可以去掉 我只需要路径 标识在shell里显示乱码估计是网页上编码的问题
最后的那个gsi啥意思阿
Re: 一个从指定网页地址批量下载相关类型文件的脚本
发表于 : 2009-08-27 23:59
由 O_O_BOT

我用的是grep 的正则 那
\.rar 罗