自己闲来无事,用mechanize做了一个可以下载校内相册照片的代码。 写的有些简陋。。。。主要是根据相册的地址来分析用户ID和相册ID,然后模拟请求相册页面,并提取所有照片,然后下载到本地的一个文件夹中。 ruby版本:ruby1.8.7 or ruby1.9.2 操作系统:windows 7 Linux下没有试过~不过应该也可以的: 代码如下: #encoding: utf-8 require ‘rubygems’ require ‘mechanize’ class Renren def initialize(e,p) @agent = Mechanize.new @ 在本示例中,我们看到一个使用Ruby编程语言和Mechanize库编写的脚本,目的是批量下载校内网(现人人网)的相册照片。这个脚本主要用于自动化访问和下载用户相册中的所有图片,它的工作流程如下: 1. **初始化**: 脚本首先通过`initialize`方法创建一个新的Mechanize实例,该实例用于模拟浏览器行为。它访问校内网主页并提交登录表单,其中包含用户提供的电子邮件(e)和密码(p)。 ```ruby def initialize(e, p) @agent = Mechanize.new @page = @agent.get('http://3g.renren.com/') @page = @page.form_with(:method => 'POST') do |r| r.email = e r.password = p end.submit end ``` 2. **获取相册照片**: 使用`fetch_other_photo`方法,该方法接收相册链接(album_link)和文件夹名称(foldername)作为参数。它首先解析相册链接以获取用户ID(user_id)和相册ID(album_id),然后使用这些ID请求相册页面。 ```ruby def fetch_other_photo(album_link, foldername) # 解析相册链接、获取用户ID和相册ID # ... page = @agent.get("http://3g.renren.com/album/wgetalbum.do?id=#{user_id}&owner=#{album_id}") # 获取所有照片链接 # ... # 下载照片 # ... end ``` 3. **解析相册链接**: `parse_album_uri`方法用于从相册链接中提取用户ID和相册ID。如果链接格式正确,该方法将返回一个包含这两个ID的数组。 ```ruby private def parse_album_uri(uri) # 解析链接 # ... end ``` 4. **提取照片链接**: 在`fetch_other_photo`方法中,脚本遍历相册页面上的所有链接,寻找指向照片的链接,并将它们添加到`photo_urls`数组中。如果遇到"下一页"链接,脚本会继续请求下一页,直到没有更多的照片链接。 5. **下载照片**: 当所有照片链接都收集到后,脚本会在指定的文件夹中创建一个新目录(如果不存在的话),然后逐个下载照片。在下载每个照片时,脚本提供进度反馈,显示当前照片与总照片数的百分比。 6. **编码处理**: 代码中使用了`Iconv.conv`来进行字符编码转换,从UTF-8转为GB2312,以适应某些中文输出的情况。这可能是因为早期的校内网或某些页面元素使用了GB2312编码。 7. **运行环境**: 脚本作者提到他们的测试环境是Ruby 1.8.7或1.9.2,以及Windows 7。虽然他们没有在Linux环境下测试,但理论上在支持Ruby的任何操作系统上都能运行,只要安装了必要的依赖(如Mechanize gem)。 总结来说,这段代码展示了如何使用Ruby和Mechanize库来自动化登录网站、解析网页、提取数据以及下载资源,这对于需要类似功能的场景非常有用,比如爬虫或自动化数据抓取任务。同时,它也提醒我们在处理不同网站时可能需要考虑字符编码问题,以确保正确地显示和处理文本。
- 粉丝: 4
- 资源: 959
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助