在上一篇文章中,我们做了最基本的事情,我们自己写处理URL重定向的代码,我们自己保存这cookie,感觉很累是吧,其实的确是这样的。并且,文章的题目不是”打造个性化的又到单词本“,如果只是把最原始的html文档抓取下来,谈何个性化,应该换名成复古化吧。其实在ruby的世界里,有很多现成的包可以用的,由于gem的出现,各种包的管理更加方便了,就我们在第一篇文章中做的这些事情用mechanize这个包就可以做的很简单,因为它直接模仿我们手工在浏览器浏览页面的过程,而且这个框架提供了对URL重定向的支持,也很自动保存cookie,但它对javascript的理解不是很好,所以对密码加密还是要我们手工做。除此之外它还能够上传文件。我们在第一篇文章中做的大量的工作用以下这几行代码就可一搞定了,只能说mechanize太适合我们当前的这个小任务了。

def loginMechanize.new do |agent|agent.user_agent=@user_agentmain_page=agent.get(@main_addr)login_page=main_page.link_with(text: "单词本").clicklogin_form=login_page.form_with("f")login_form.username="××"        login_form.password="××"agent.submit(login_form)@word_page=agent.current_pageend
end

接下来就是nokogiri大显身手的时候了,通过分析源代码,我们可以直接通过单词表的xpath查询到每一个字段:

def crawl_wordslogin if @word_page==nilFile.open("myWords","w") do |file|@word_page.xpath("//tbody//tr").each do |tr|w=tr.xpath(".//td")add_time=Date.parse(w[4].content)#@stime=add_time if add_time>@stimenext if add_time<@stime#print number of each word#file.print w.shift.content,'. ' w.shiftfile.print @@count+=1,'. ' puts "processing... #{@@count}"#print literal content of each wordword_item=w.shift.xpath("./div").firstfile.print word_item.content@detail_page=@word_page.link_with(text:word_item.content).click#print phaoneticfile.print w.shift.xpath("./div").first.content,' '#print meaning item of each word on the same line w.shift.xpath(".//div").first.content.each_line {|mi| file.print mi.strip<<" "}file.puts@detail_page.xpath("//li//div//div//p").each{|example| file.puts example.content.strip}end while turn_pagefile.putsfile.print "scan time: ",Date.todayend
enddef turn_pagebegin@word_page=@word_page.link_with(text:"下一页").click unless @first_page@first_page=false@word_pagerescuereturn nilend
end

这段代码就是我们完成个性化的过程。首先通过单词表的xpath查找到每个表的行,然后依次将单词,音标,汉语解释抓取下来,每完成一页就翻到下一页。除了单词表给我们的这些信息之外,我还想的到柯林斯字典关于这个单词的例句,还好单词表里面给了链接,得到详细的单词解释的页面之后继续用xpath查找。这就构成了抓取单词的主体。并且我们在文件的末端打印这一次抓取的日期,以便下次只下载加入单词本的日期在该日期之后的单词,避免重复抓取。

上图是最后的到的单词本的word版本。现在,我们的工作就全部完成了。

应用ruby打造个性化的有道单词本 (二)相关推荐

  1. 《Ruby程序员修炼之道》(第2版)目录—导读

    版权 Ruby程序员修炼之道(第2版) • 著 [美] David A. Black 译 钟凤鸣 陈雪静 责任编辑 杨海玲 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 ...

  2. 【星球问答精选】我想打造个性化的高效工作流,不会编程怎么办?

    题图:Photo by Christin Hume on Unsplash 知识星球上,星友 Kevin 提问(为保护隐私,有删节): 王老师您好,我是您的超级忠实读者以及新晋工具爱好者.由于新晋,所 ...

  3. 《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.2节剖析Ruby的安装,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

  4. 《Ruby程序员修炼之道》(第2版)—第1章1.4节易用的Ruby工具和应用程序

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.4节易用的Ruby工具和应用程序,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖 ...

  5. 《Ruby程序员修炼之道》(第2版)—第1章1.1节进入Ruby的世界

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.1节进入Ruby的世界,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

  6. 安卓直播详细教程(三)-----ijkplayer打造个性化控制界面

    ##前言 为什么要写这篇文章呢? Firsr:直接集成ijkplayer的控制界面太丑了 Second:无法满足我们的需求 我们来看下直接集成的ijkplayer控制界面: 是不是没法用,那么我们现在 ...

  7. Oracle营销云与微信集成,打造个性化体验

    Oracle营销云与微信集成,打造个性化体验 为了让市场营销人员在全球成长最快速的社交媒体平台之一微信(WeChat)上迅速有效地针对目标客户进行互动和关系维护,甲骨文今日宣布,将Oracle营销云( ...

  8. 后疫情时代,VR云游打造个性化云服务

    后疫情时代,线上经济引导着市场转型升级,"云对接"."云洽谈"."云购物"等模式已然成为我们社会发展的主要趋势.近年来,各地也都在积极的推进 ...

  9. 黑人电动牙刷研发新品打造个性化刷牙体验

    黑人牙刷自2017年进军电动牙刷市场,便受到消费者的广泛青睐.其首款电动牙刷"黑人声波深洁ET1电动牙刷"开启了科技助力口腔健康的新纪元.此后,黑人品牌再接再厉,经过研发部门精心设 ...

  10. 树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇二:初步配置 Home Assistant 并连接小米设备与 HomeKit

    树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇二:初步配置 Home Assistant 并连接小米设备与 HomeKit 通过本篇教程,你将完成对 H ...

最新文章

  1. linux——Firewalld与iptables的基本配置
  2. php网页打开输入密码,PHP输入密码查看网页
  3. c java 开发效率高_Java 的开发效率究竟比 C++ 高在哪里?
  4. 关闭后天 树莓派_陪你一起玩树莓派-系统安装
  5. Activiti工作流(三)——流程变量
  6. 两个有序链表序列的交集
  7. ASP.NET WebForm echarts初试随笔
  8. Android 系统(257)---Launcher显示未读通知的数量
  9. hdfs用fileutil读取文件内容_MoviePy - 用Python玩转视频剪辑!(MoviePy安装及视频文件读取)
  10. 转:为 setuptools 开路搭桥
  11. 火狐浏览器驱动_火狐浏览器开始支持比WebGL更简单的绘图API WebGPU
  12. PHP try catch 捕获异常,最后调用的方法中错误不打印
  13. 欢迎进入测试day01作业
  14. FPGA之旅设计99例之第十九例----OV5640上电及初始化
  15. 高数 | 【多元函数微分学】全微分不变性、隐函数求导辨析
  16. 微信下单、支付流程和注意事项
  17. Oracle数据库(定义、特点、体系结构)
  18. 男生学计算机会计,男生学习会计专业好吗
  19. 斗鱼“亏转盈”,内容付费真的能代替游戏直播?
  20. 【拓扑学知识】1.拓扑空间与度量拓扑

热门文章

  1. VM虚拟机装Windows2000成功后VM Tools失败解决方法
  2. linux vi下划线,如何将我的Vim高亮线更改为不是下划线?
  3. discuz门户文章增加代码高亮
  4. HttpSession的简介
  5. C++入门——实现十字消除游戏
  6. acer 4741G驱动
  7. 如何实现:手机监控PC桌面?(附源码)
  8. LFM的脉冲压缩,即匹配滤波器的产生
  9. Python生成二维码
  10. 推荐5款纯净好用的良心浏览器,实现浏览自由