利用hpricot抓取baidu的图片

最近忙里抽闲,研究了一下hpricot,感觉真是不错,我用它很轻松地实现了百度图片的批量下载。

如:在百度图片搜索中输入“泰晤士河”,想把查找到的所在大图片都拉到本地电脑上面,还要一个个去点小图片,进入大图显示页面,才能将图片保存起来,真是不方便。

现在我通过hpricot来搞定这个。
目标URL就是我百度图片搜索中输入“泰晤士河”产生的URL:
[url]http://image.baidu.com/i?tn=baiduimage&ct=201326592&cl=2&lm=-1&pv=&word=%CC%A9%CE%EE%CA%BF%BA%D3&z=0[/url]
我现在通过hpricot找出查询结果中的所有显示大图的页面链接,然后再在大图中分析URL,找出大图img的src,进而利用open-uri进行文件读写,从而把图片拉下来。

现在在看一下代码吧,看,代码量这么少,Ruby就是方便和人性化。

require 'rubygems'
require 'hpricot'
require 'open-uri'

#取得查询结果页面的所有指向大图页面的链接(目前取了第一页)
def get_link_list
target_url = "http://image.baidu.com/i?tn=baiduimage&word=%CC%A9%CE%EE%CA%BF%BA%D3&z=0&lm=-1&ct=201326592&cl=2"
doc = open(target_url) { |f| Hpricot(f) }
link_list = Array.new
doc.search("div#imgid/dl/dd/div/a").each do |r|
link_list << "http://image.baidu.com"+r.attributes["href"]
end
link_list
end

#将大图页面中的大图片下载到本地电脑
def down_load(url)
doc = open(url) { |f| Hpricot(f) }
# /div/table/tbody/tr/td
doc.search("a[@target='_top']/") do |r|
file_url = r.attributes["src"]
puts file_url + "\n"
file_name = file_url[file_url.rindex("/")+1, file_url.size]
open(file_url) do |data|
new_image = File.new(file_name, "w")
new_image.puts data.read
new_image.close
end
end
end

#将所有的图片都下载到本地电脑中
def down_load_all_images
get_link_list.each do |url|
down_load(url)
end
end

#执行方法
down_load_all_images


初次使用,感觉hpricot解析HTML真是方便,就是那么几下子就搞定了,并且感觉速度不错,以后如果要用到爬虫方面,用这个没错。

另外,感觉使用Ruby写代码,真是舒服啊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值