- 浏览: 340697 次
- 性别:
- 来自: 蕲春->上海
文章分类
最新评论
-
duanyu010:
"Devel"选项 选项下包含了多个 gc ...
在cygwin中安装gcc编译器 -
brown802:
Event.observe('test', 'click',f ...
Prototype中的Event.observe用法 -
zhangyanan_it:
讲一下好吧!
Rails MD5 SHA1 加密用戶密碼 -
zhangyanan_it:
多谢!
Rails MD5 SHA1 加密用戶密碼 -
virusswb:
paperclip文件上传
在Rails中快速方便地使用Tiny mce编辑器
最近忙里抽闲,研究了一下hpricot,感觉真是不错,我用它很轻松地实现了百度图片的批量下载。
如:在百度图片搜索中输入“泰晤士河”,想把查找到的所在大图片都拉到本地电脑上面,还要一个个去点小图片,进入大图显示页面,才能将图片保存起来,真是不方便。
现在我通过hpricot来搞定这个。
目标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
我现在通过hpricot找出查询结果中的所有显示大图的页面链接,然后再在大图中分析URL,找出大图img的src,进而利用open-uri进行文件读写,从而把图片拉下来。
现在在看一下代码吧,看,代码量这么少,Ruby就是方便和人性化。
初次使用,感觉hpricot解析HTML真是方便,就是那么几下子就搞定了,并且感觉速度不错,以后如果要用到爬虫方面,用这个没错。
另外,感觉使用Ruby写代码,真是舒服啊。
抓取已经过时,open api才是王道..
http://hooopo.iteye.com/blog/417328
"10行代码就可以搞定了,结合命令行更少".能给出具体的方法吗?
同意,ruby配合命令行才是王道。
的确,如果用unix shell配合wget这个命令工具,也就一行代码。
高手可否写出这一行代码~~
同意,ruby配合命令行才是王道。
的确,如果用unix shell配合wget这个命令工具,也就一行代码。
同意,ruby配合命令行才是王道。
如:在百度图片搜索中输入“泰晤士河”,想把查找到的所在大图片都拉到本地电脑上面,还要一个个去点小图片,进入大图显示页面,才能将图片保存起来,真是不方便。
现在我通过hpricot来搞定这个。
目标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
我现在通过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写代码,真是舒服啊。
评论
12 楼
sevk
2009-07-13
想不到还可以这样啊,一直不知道有 Hpricot 这东东, 哈哈,学习了。
11 楼
Hooopo
2009-07-01
不是流氓 写道
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=21&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=42&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=63&ln=2000
LZ可以看看这三个地址标红色的部分,分别对应着“百度图片”搜索结<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script>果的1,2,3页,也就是说URL几乎一样的,差就只是差在pn的值上,而且值是等差数列,相差21!,绿色对应着搜索的关键字~
Google的图片搜索也有同样的方法,不知道怎么实现的,希望有懂的人上来解释一下
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=42&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=63&ln=2000
LZ可以看看这三个地址标红色的部分,分别对应着“百度图片”搜索结<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script>果的1,2,3页,也就是说URL几乎一样的,差就只是差在pn的值上,而且值是等差数列,相差21!,绿色对应着搜索的关键字~
Google的图片搜索也有同样的方法,不知道怎么实现的,希望有懂的人上来解释一下
抓取已经过时,open api才是王道..
require'google-rest' include GoogleRest client = GoogleSearch.new client.search(:q => "ruby", :hl =>'zh-cn', :type => 'images').each{|image_url| p image_url}
http://hooopo.iteye.com/blog/417328
10 楼
不是流氓
2009-07-01
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=21&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=42&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=63&ln=2000
LZ可以看看这三个地址标红色的部分,分别对应着“百度图片”搜索结果的1,2,3页,也就是说URL几乎一样的,差就只是差在pn的值上,而且值是等差数列,相差21!,绿色对应着搜索的关键字~
Google的图片搜索也有同样的方法,不知道怎么实现的,希望有懂的人上来解释一下
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=42&ln=2000
http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&word=img&z=0&rn=21&pn=63&ln=2000
LZ可以看看这三个地址标红色的部分,分别对应着“百度图片”搜索结果的1,2,3页,也就是说URL几乎一样的,差就只是差在pn的值上,而且值是等差数列,相差21!,绿色对应着搜索的关键字~
Google的图片搜索也有同样的方法,不知道怎么实现的,希望有懂的人上来解释一下
9 楼
programming
2009-05-04
下张图片那里要十行咯。10行之内就可以搞定
8 楼
Readonly
2008-10-01
使用正则表达式的例子:
如果配合Robbin说的wget,硬要在一行里面搞定也可以:
require 'open-uri' 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" open(target_url).read.scan(/<a name='pn\d+' href="(.*?)"/){|link| img_url = open("http://image.baidu.com/#{link}").read[/_top"><img src="(.*?)"/, 1] open(img_url[/\/([^\/]*?)$/, 1], "wb").write(open(img_url).read) }
如果配合Robbin说的wget,硬要在一行里面搞定也可以:
open(target_url).read.scan(/<a name='pn\d+' href="(.*?)"/){|link| `wget #{open("http://image.baidu.com/#{link}").read[/_top"><img src="(.*?)"/, 1]}`}
7 楼
hotman
2008-10-01
robbin 写道
楼主,你的代码写得太难看了,按照你那个需要,不要10行代码就可以搞定了。你写的实在太不ruby style了,呵呵,还是不打击楼主了。
"10行代码就可以搞定了,结合命令行更少".能给出具体的方法吗?
6 楼
aztack
2008-09-30
robbin 写道
花花公子 写道
robbin 写道
楼主,你的代码写得太难看了,按照你那个需要,不要10行代码就可以搞定了。你写的实在太不ruby style了,呵呵,还是不打击楼主了。
同意,ruby配合命令行才是王道。
的确,如果用unix shell配合wget这个命令工具,也就一行代码。
高手可否写出这一行代码~~
5 楼
robbin
2008-09-28
花花公子 写道
robbin 写道
楼主,你的代码写得太难看了,按照你那个需要,不要10行代码就可以搞定了。你写的实在太不ruby style了,呵呵,还是不打击楼主了。
同意,ruby配合命令行才是王道。
的确,如果用unix shell配合wget这个命令工具,也就一行代码。
4 楼
花花公子
2008-09-28
robbin 写道
楼主,你的代码写得太难看了,按照你那个需要,不要10行代码就可以搞定了。你写的实在太不ruby style了,呵呵,还是不打击楼主了。
同意,ruby配合命令行才是王道。
3 楼
robbin
2008-09-28
楼主,你的代码写得太难看了,按照你那个需要,不要10行代码就可以搞定了。你写的实在太不ruby style了,呵呵,还是不打击楼主了。
2 楼
feeling3_4
2008-09-28
也许你不需要用hpricot那么底层的东西,推荐http://mechanize.rubyforge.org/mechanize/,使用的也是hpricot
1 楼
jack_9008
2008-09-28
听说ruby不错 简洁 想看下
正好这有个例子 看来 RUBY用途不少呢
正好这有个例子 看来 RUBY用途不少呢
发表评论
-
使用Ruby Encoder加密Ruby代码
2012-02-27 13:56 2424Use Rubyencoder Encrypt Ruby ... -
解决oracle-enhancedk中的一个bug
2010-12-06 09:57 0usermatoMacBook-Pro:jjsc_web_ba ... -
mac osx上安装rmagick
2010-10-25 12:03 4278本来以为安装这个超级麻烦,我那时是想从源码编译安装,后来找到p ... -
dduuuuuuu
2010-10-20 21:02 0说说rspec2 rspec2 前不久出来了,它 ... -
最新版本的gcc编译安装fcgi出错的解决办法
2010-03-06 17:43 10289最近在折腾vps,在上面步骤ROR应用,部署方案还是用我倾向的 ... -
来自O’Reilly出版社的《Ruby Best Practices》
2010-03-04 17:40 1781我在rubyinside网站上看到了《Ruby Best Pr ... -
手机版网站开发(1)
2010-01-25 18:16 0要开始着手这方面的事情了,所以通些这段时间的调研,发现要关注的 ... -
在Ruby中调用存储过程
2010-01-23 10:57 0在pl/sql developer里 Connected t ... -
Rails2.0.2中rake在production环境不能log
2010-01-22 15:14 1316目前的定时任务是用cron + rake。 在rake中使用 ... -
Will_paginate支持分页和排序的多条件查询
2009-12-28 11:09 0Logistic Model # 支持分页和排序的多条件查 ... -
Rails生成HTML
2009-12-28 10:59 1798在Rails中生成HTML一般有现在的Page Cache,不 ... -
Ruby中处理Excel
2009-12-19 14:23 1232发现了一个很不错的解决方案: 这里是它的GUIDE http: ... -
在Rails中的 Model中使用current_user
2009-12-19 12:31 4716在Rails中的 Model(业务层)中使用current_u ... -
在Ruby中处理压缩文件
2009-12-18 18:39 1074http://rubyzip.sourceforge.net/ ... -
火星高楼抢楼机器人
2009-08-05 14:15 13382009-8-14下午JavaEye登录更新了,加了图片验证码 ... -
Rails中使用好named_scope与时间区间
2009-07-18 00:56 2494在我最近的工作中,由于要做数据统计,与时间区间打交道非常多,如 ... -
Ruby中的类方法与实例方法
2009-06-28 18:12 3115原文:http://railstips.org/2 ... -
Rails社区对Rails3特性的讨论和反馈
2009-05-31 21:29 2355Rails官方博客写道他们在UserVoice上建立了一个讨论 ... -
为非Restful的action准备的插件:static_actions
2009-05-30 10:06 1297如果我们的Rails应用里能够全部Restful,那很cool ... -
Ruby游戏开发利器Gosu
2009-05-16 18:46 3128在2009年的Railsconf大会上,Hongli Lai和 ...
相关推荐
在本文中,我们将深入探讨如何使用Java编程语言和Spring Boot框架来实现百度图片的抓取与下载功能。首先,我们需要了解几个关键的概念和技术。 **Java** 是一种广泛使用的面向对象的编程语言,它以其跨平台的特性而...
在本项目案例中,我们将深入探讨Python编程在爬虫应用中的实际操作,特别是如何利用Python来抓取并下载百度图片。这个案例旨在帮助初学者掌握网络爬虫的基本技术和流程,同时也为进阶开发者提供了一个实战练习的机会...
在IT领域,尤其是在图像处理和计算机视觉应用中,从摄像头直接随机抓取图片是一项常见的任务。这个过程涉及到了几个关键的技术点,包括设备驱动、图像采集、随机数生成以及文件处理。下面将详细阐述这些知识点。 1....
Python3爬虫抓取百度图片中的图片,可根据需求输入关键字、图片数量
在分析百度图片搜索的检索条件时,我们可以发现,百度提供了多种图片检索条件,这些条件包括图片格式、抓取时间、图片尺寸、颜色分布、动静格式、图片主要展示的内容等等。这些条件使得用户可以更加精准地搜索到所需...
在这个主题中,我们将探讨如何使用Python来抓取百度云分享的数据,特别是利用百度云最新的API接口。这通常涉及到请求、解析HTML或JSON响应、处理验证码以及可能的反爬策略。 首先,要抓取百度云分享的数据,我们...
python爬虫,抓取百度图片存储到本地文件夹中,可以修改关键字,所需图片的长宽
【标题】:“抓取MM图片”这一主题涉及的是网络图像数据的采集技术,特别是针对特定类型(例如“MM”,通常指的是美女图片)的图片进行抓取。这在互联网上广泛应用于个人兴趣、数据分析或者网站内容的自动更新。在这...
本话题主要关注如何抓取网页上的图片、CSS(层叠样式表)和JavaScript文件,以及处理CSS中内联的图片资源。下面将详细讨论这些知识点。 一、网页抓取基础 网页抓取通常通过网络爬虫实现,这是一种自动遍历互联网并...
在这个项目中,"qt写的抓取网页图片并保存到本地",开发者利用QT的网络编程和文件操作功能,实现了一个小型的爬虫程序。这个程序可以解析指定URL的网页内容,从中提取出所有的图片链接,并将这些图片下载保存到本地...
网站图片抓取工具是一种利用编程技术,特别是Python语言,实现从网页中自动提取并下载图片的软件工具。这种工具在数据分析、图像分析、网站备份、社交媒体监控等多种场景中都有广泛应用。接下来,我们将深入探讨该...
php 抓取百度搜索结果脚本,php命令行下运行
然而,理解其背后的原理和技术,不仅可以帮助我们更好地利用这类工具,也为我们提供了进一步探索网页抓取和自动化数据获取的可能。在日常工作中,结合适当的编程技能和工具,我们可以实现更多定制化的图片抓取需求。
网页图片抓取与批量保存是网络数据采集领域中常见的需求,尤其对于设计师、研究人员或内容创作者来说,高效地获取和管理网页上的图片资源至关重要。在这个过程中,我们可以利用各种工具和技术来实现这一目标,包括...
本程序可以抓取指定IE窗口中已下载完毕的网页中的全部或部分图片(可根据图片文件后缀和图片所属站点的域名过滤,也可以对单个图片进行选取),对于选中的图片,可以: 1)抓取文件URL列表,可以转换为UBB代码或HTML...
同时,对于抓取的大量数据,应合理存储和利用,避免数据冗余和资源浪费。 总的来说,"百度地图抓取软件"VER4.0是一款面向地图数据获取和管理的工具,它可以帮助用户便捷地获取百度地图的信息,但使用时务必谨慎,...
这段代码是一个Python爬虫程序,用于从百度图片搜索中抓取指定关键词的图片。程序通过设置超时时间和请求头等参数,实现了对百度图片搜索结果的访问和解析。程序的主要功能包括: 1. 定义了一个名为`Crawler`的类...
自动抓取美女图片,python爬虫
【抓取网页图片工具V1.1】是一款实用的软件,专为用户设计,用于方便地从网页中批量下载并保存图片至个人计算机。这款工具简化了图片收集过程,尤其适用于那些需要大量素材的设计师、摄影师或者网络内容创作者。通过...