0

我正在尝试编写一个 linux 脚本来搜索网页上的链接并从该链接下载文件...

网页是: http: //ocram.github.io/picons/downloads.html

我感兴趣的链接是:“hd.reflection-black.7z”

我这样做的原始方式是使用这些命令..

lynx -dump -listonly http://ocram.github.io/picons/downloads.html &> output1.txt
cat output1.txt | grep "17" &> output2.txt
cut -b 1-6 --complement output2.txt &> output3.txt
wget -i output3.txt

我希望有一种更简单的方法可以在网页上搜索链接“hd.reflection-black.7z”并保存链接文件。

这些文件存储在 url 中不包含文件名的谷歌驱动器上,因此在上面的第二行代码中使用“17”..

4

3 回答 3

1

@linuxnoob,如果您要下载文件(curl 比 wget 更强大):

curl -L --compressed `(curl --compressed "http://ocram.github.io/picons/downloads.html" 2> /dev/null | \
grep -o '<a .*href=.*>' | \
sed -e 's/<a /\n<a /g' | \
grep hd.reflection-black.7z | \
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d')` > hd.reflection-black.7z

没有缩进,为您的脚本:

curl -L --compressed `(curl --compressed "http://ocram.github.io/picons/downloads.html" 2> /dev/null | grep -o '<a .*href=.*>' | sed -e 's/<a /\n<a /g' | grep hd.reflection-black.7z | sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d')` > hd.reflection-black.7z 2>/dev/null

你可以试试!

于 2013-10-31T22:05:07.590 回答
0

我会尽量避免使用正则表达式,因为它们往往会以意想不到的方式中断(例如,由于某种原因,输出被分成多行)。

我建议使用 Ruby 或 Python 之类的脚本语言,在这些语言中可以使用更高级别的工具。以下示例使用 Ruby:

#!/usr/bin/ruby
require 'rubygems'
require 'nokogiri'
require 'open-uri'

main_url = ARGV[0] # 'http://ocram.github.io/picons/downloads.html'
filename = ARGV[1] # 'hd.reflection-black.7z'
doc = Nokogiri::HTML(open(main_url))

url = doc.xpath("//a[text()='#{filename}']").first['href']
File.open(filename,'w+') do |file|
  open(url,'r' ) do |link|
  IO.copy_stream(link,file)
  end
end

将其保存到类似的文件中fetcher.rb,然后您可以使用它

ruby fetcher.rb http://ocram.github.io/picons/downloads.html hd.reflection-black.7z

为了让它工作,你必须安装 Ruby 和 Nokogiri 库(两者都在大多数发行版的存储库中可用)

于 2013-10-31T12:10:05.470 回答
0

关于什么?

curl --compressed "http://ocram.github.io/picons/downloads.html" | \
grep -o '<a .*href=.*>' | \
sed -e 's/<a /\n<a /g' | \
grep hd.reflection-black.7z | \
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'
于 2013-10-31T11:18:03.160 回答