用于提取网页上所有图像列表的脚本(网页抓取代码)

时间:2012-08-25 20:01:30

标签: shell scripting

我想要一个可以在网页上提取所有图片列表(例如*.jpg)的脚本,即以.jpg

结尾的网址

使用此脚本,我会使用>将输出传输到文件,然后使用管道输出作为wget的输入。

这是否可以使用shell脚本。

(编辑:我正在使用bash shell)

3 个答案:

答案 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