我想要一个可以在网页上提取所有图片列表(例如*.jpg
)的脚本,即以.jpg
使用此脚本,我会使用>
将输出传输到文件,然后使用管道输出作为wget
的输入。
这是否可以使用shell脚本。
(编辑:我正在使用bash
shell)
答案 0 :(得分:3)
如何使用lynx
?
lynx -image_links -dump www.google.com |
grep '\. https\?://.*\.\(gif\|jpg\|png\)$'
要清理输出,您可以使用cut
:
lynx -image_links -dump www.google.com |
grep '\. https\?://.*\.\(gif\|jpg\|png\)$' |
cut -d . -f 2- |
cut -d ' ' -f 2-
答案 1 :(得分:0)
因为并非所有shell都提供开箱即用的Web连接(当然Windows shell没有),动态脚本语言(如Ruby或Python)的解决方案可以跨平台工作。
这是一些Ruby代码,当指向网页时,会搜索* .jpg,将它们全部列出,然后下载它们。 (顺便说一句,它可以用于PDF,PNG,无论你想要什么,只需简单的修改。)
# web page scraper that downloads jpgs (or easily PDFs, txt files, csvs, etc.) AKE (1/2009)
require 'net/http'
# take instructions from the command line
my_domain_name = ARGV[0] # JUST the domain name
my_path = ARGV[1] # the path separated on either end by /
my_filename = ARGV[2] # the html filename
puts "Scraping #{my_domain_name + my_path + my_filename}"
response = "empty"
Net::HTTP.start( my_domain_name ) do |http|
response = http.get( my_path + my_filename ).body
end
# writing scraped html into text file, for reference / debugging
open("scraped.txt", "wb") {|s|
s.write(response)
}
# parse the response to make list of jpg files
files = response.scan(/\w+.jpg/)
# download each jpg
files.each do |file|
image_filename = file
puts "Writing #{image_filename}..."
Net::HTTP.start(my_domain_name) do |http|
jpg = http.get(file)
open(image_filename, "wb") {|p|
p.write(jpg.body)
}
end
puts "Done!"
end
答案 2 :(得分:0)
如果您确实要下载所有图片:
for i in `lynx -image_links -dump http://www.google.com | grep 'jpg\|gif' \
| grep http | awk '{print $2}'`; do wget $i; done