我想从这样的数字序列中提取链接:
http://example.com/page001.html
http://example.com/page002.html
http://example.com/page003.html
...
http://example.com/page329.html
我想要的输出是一个文本文件,其中包含从这些页面上的链接收集的URL:
http://www.test.com/index.html
http://www.google.com
http://www.superuser.com/questions
要清楚,我不想下载页面,我只想要一个链接列表。
Windows软件很有意思,但Linux也可以。我能想到的只是用Xidel编写一个长批处理脚本,但遇到错误时它不会很强大。Curl可以下载页面范围,但是我需要以某种方式解析它们。
感谢Enigman让我走上正轨。我创建了一个Perl脚本,它从文件中读取URL并吐出与$ site中存储的字符串匹配的链接:
use warnings;
use LWP;
$site = "twitter.com";
my $browser = LWP::UserAgent->new;
my @ns_headers = (
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language' => 'en-GB,en;q=0.8',
);
open (URLLIST, 'urls.txt');
while (<URLLIST>) {
chomp;
print "# $_\n";
my $response = $browser->get($_, @ns_headers);
die "Can't get $_ -- ", $response->status_line
unless $response->is_success;
my @urls = $response->content =~ /\shref="?([^\s>"]+)/gi ;
foreach $url(@urls) {
if ($url =~ /$site/) {
print("$url\n");
}
}
}
close(URLLIST);
为了生成URL列表,我制作了一个小批量脚本:
@echo off
for /l %%i in (0, 15, 75) do @echo http://www.example.com/page_%%i.html
Perl脚本只是在错误上停止,我更喜欢。将其修改为继续进行将是微不足道的。用户代理和接受数据是从Chrome中删除的,因为有些网站不喜欢看起来像机器人的任何东西。如果您打算扫描您不拥有的网站,请尊重robots.txt并设置自定义用户代理。
href
属性<a>
,保存它们,并丢弃其余的HTML。对?
href
属性<a>
吗?你在哪里得到数字序列?