一个从指定网页地址批量下载相关类型文件的脚本

sh/bash/dash/ksh/zsh等Shell脚本
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

一个从指定网页地址批量下载相关类型文件的脚本

#1

帖子 formylove2 » 2009-08-26 23:53

比如这个网页上有大批rar类型的文件 提供了超级连接 可供直接下载 无登录等限制

当然 也可以是PDF阿 什么的 我想写一个脚本 用wget批量下载 但用什么判断这些页面上的东东呢?

望有高手指条明路
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#2

帖子 formylove2 » 2009-08-26 23:55

给点提示都行
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#3

帖子 O_O_BOT » 2009-08-27 8:12

分析 href -> grep -> ok
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#4

帖子 eexpress » 2009-08-27 9:34

代码: 全选

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";}
}
● 鸣学
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#5

帖子 formylove2 » 2009-08-27 18:22

代码: 全选

$html=~m{<a href=(["'])(.*?)\1.*?>(<.*?/>)*(.*?)</a>}gsi
#这个正则下来有哪几个变量赋值了?

代码: 全选

$l=~/^http/ and $l!~/com\/$|cn\/$/ and $t!~/^</
#这个是去掉地址中的http com cn 然后找到匹配$l 和$t 的东西?
这两个正则 。。我实在是看不明白
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#6

帖子 formylove2 » 2009-08-27 19:19

不过很感谢EE

perl 的LWP 模块 进行页面分析 前面那段网页内容的获取没多大问题

就是后面那些正则分析 提取需要的内容。。哎 真是想破脑袋
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#7

帖子 O_O_BOT » 2009-08-27 21:07

要shell的没
上次由 O_O_BOT 在 2009-08-28 1:06,总共编辑 1 次。
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#8

帖子 eexpress » 2009-08-27 21:22

perl 的正则,天生强大,而且难懂。 :em04
● 鸣学
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#9

帖子 formylove2 » 2009-08-27 21:59

O_O_BOT, 的 有点玩不明白

./脚本 目标地址 ? 这样运行么? 提示输入Inpu regex 我输入 *.rar 只能下载主页


我现在根据ee的办法 现用perl提取到指定页面的内容 让脚本建个wget的下载list 把指定页面的 链接分析 放到 list中 然后调用wget下载

现在问题就是怎么把指定页面内容里的 <a href= > </a> 中的 指定类型给"正则"出来

对了 我怎么在perl脚本中调用bash里的程序阿?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#10

帖子 eexpress » 2009-08-27 22:46

调用啊。就是``啊
比如

代码: 全选

`wget $myurl`;
<a href= > </a> 中的 指定类型给"正则"出来
你试试这注释掉的那句,就知道了。
while($html=~m{<a href=(["'])(.*?)\1.*?>(<.*?/>)*(.*?)</a>}gsi){
#print "$2\t--->$4\n";
● 鸣学
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#11

帖子 knowfarway » 2009-08-27 23:03

cat fetch-link.pl
这个是什么东东?我这里木有fetch-link.pl,怎么办?
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#12

帖子 formylove2 » 2009-08-27 23:24

$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时都这样子?:���
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#13

帖子 eexpress » 2009-08-27 23:27

就是模式匹配的。那些()嘛。几个()里面的。就是$digit 表示的。


给你一个我整理的变量说明。
附件
perl内置变量的列表.html.tar.gz
(1.81 KiB) 已下载 51 次
● 鸣学
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#14

帖子 formylove2 » 2009-08-27 23:55

哦 有点眉目了 重点就是正则 你那个开头
["'] 是针对 这样的形式 "xxxxx" 'xxxx' 才匹配 有些连接没有"" 和''

后面的那个(<.*?/>)*(.*?)</a> 可以去掉 我只需要路径 标识在shell里显示乱码估计是网页上编码的问题

最后的那个gsi啥意思阿
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

Re: 一个从指定网页地址批量下载相关类型文件的脚本

#15

帖子 O_O_BOT » 2009-08-27 23:59

:em20 我用的是grep 的正则 那
\.rar 罗
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
回复