每个用户的博客都有各自的样式,页面都比较杂乱。我想采用ruby实现能够抓取没个博客页面中的主体部分(即标题,发布时间和内容部分)。
实现思路是这样的:
1. 把给定地址的博客页面下载到本地一个文件C:\\down.html中
2. 将这个文件中的内容读取到一个字符串@str中,同时完成去换行、去空格、转换为小写的工作
3. 找到百度博客内容开始标签“<div id="m_blog" class="modbox"> ”在@str中的位置start_index
4.找到百度博客内容结束前标签“<div class="opt">”在@str中的位置end_index
5.取的两个位置中间的部分“@str[start_index..end_index]”即是所需要的。
6.将所需部分保存到一个新建文件中
完成第1步的文件代码如下:
file: down_html.rb
#导入net类库
require 'net/http'
#定义一个保存到本地的文件
html_file = File.new("C:\\down.html","w")
#定义站点、端口、文件路径
url ="hi.baidu.com"
port =80
file_name ='/kenrome/blog/item/3d1b4a16f7065f4d21a4e968.html'
#开始读
Net::HTTP.start(url,port) do |http|
#写进文件
html_file.puts http.get(file_name).body
end
完成第2-6步的代码如下:
file: excut_html.rb
#找到保存到本地的html文件
html_file ="C:\\down.html"
#打开文件
file =File.open(html_file, "r")
#按行读到一个字符串变量中
@str=""
file.each_line do |line|
@str += line.chomp.strip.downcase
end
#找到需要的位置
start_index = @str.index(/div id="m_blog"*/)-1
end_index = @str.rindex(/div class="opt"*/)
#将内容写入文本
new_file =File.new("c:\\excut.html","w")
new_file.puts @str[start_index..end_index]
#解读
#File.new("c:\\excut.html","a") 追加
#File.new("c:\\excut.html","w") 重写
#chop chop方法将会删除最后一个字符,返回新的string。
#如果字符是以\r\n结束,则两个字符都会被删除
#而chomp方法则会默认删除回车换行符,
#如果有参数的话,将会删除参数所代表的字符串
#strip将会删除掉字符串的开头和结尾的空格
#downcase 将字符转换为小写
#index方法返回指定的子字符串,正则表达式或者字符的起始位置(如果有多个匹配的只返回第一个匹配的起始位置),没有发现的话返回nil
#而rindex则是从string的右边(也就是结束处)开始查找,不过返回的值却是从左边数起的
分享到:
相关推荐
用ruby写的网页抓取脚本,可用于在线文档下载以及整站下载。
Kimura - 用Ruby编写的现代Web抓取框架,与Headless Chromium / Firefox,PhantomJS或简单的HTTP请求一起开箱即用,并允许抓取用交互JavaScript呈现的网站
在Ruby开发中,有时我们需要将地址转换为经纬度坐标,或者根据坐标反向查询地址,这时可以利用百度地图API来实现。本篇文章将详细介绍如何在Ruby中使用百度地图API进行地址定位、坐标定位以及名称定位。 首先,我们...
本示例将详细介绍如何使用Ruby代码通过百度SMS接口实现短信发送功能。百度SMS服务提供了一个方便的方式来与用户进行实时通信,例如验证身份、通知重要事件等。在本文中,我们将探讨如何配置和使用这个服务,并分析...
6. **弃用警告**:Ruby 3.1对一些即将废弃的功能发出警告,为向未来版本过渡做好准备,比如`Array#bsearch`的旧实现。 7. **兼容性增强**:Ruby 3.1对其他语言的兼容性进行了增强,比如改进了与C++的互操作性。 8....
**Ruby-TensorStream:用Ruby重现实现TensorFlow** Ruby-TensorStream是一个开源项目,旨在为Ruby开发者提供一个类似于Google TensorFlow的深度学习框架。它的核心目标是让Ruby程序员能够利用TensorFlow的强大功能...
用Ruby编写的简单分布式区块链实验
Ruby是一种强大的、动态的、面向对象的脚本编程语言,由日本人松本行弘于1993年设计并开发。它的设计理念在于提供一种简单、直观且高效的编程环境,注重开发者的生产力和代码的可读性。Ruby的核心特性包括垃圾回收...
Ruby Ruby Ruby Ruby Ruby Ruby
Ruby安装包
在"Ruby-技术博客汇总英"这个主题中,我们可以深入探讨Ruby在开发领域中的应用,特别是与API构建相关的知识。 首先,Ruby在API构建方面扮演着重要角色,主要归功于一个名为Rails的全功能Web开发框架。Ruby on Rails...
This Head First guide teaches you the Ruby language in a concrete way that gets your neurons zapping and helps you become a Ruby genius. You'll enter at Ruby's language basics and work through ...
Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称。这个"Ruby基础语法视频教程1"涵盖了几个关键的概念,包括变量、变量规则以及表达式。以下是对这些主题的详细解释: 1. 变量(Variables): 在Ruby中,...
在这个"ruby on rails blog(博客)制作"项目中,我们将深入探讨如何利用Rails创建一个基本的博客系统。 首先,让我们了解Rails的安装与初始化。在开发环境上,你需要安装Ruby、Rails和相关的数据库管理系统,例如...
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大...
用Ruby写的一个网络爬虫,用到了正则表达式 和哈希表
3. Rubinius:Rubinius是一个用Ruby语言大部分实现的虚拟机,其目标是提供一个高性能的、符合Ruby语言规范的平台。它使用LLVM作为后端,支持即时编译,旨在提供比MRI更好的性能。 4. MagLev:MagLev是GemStone/S...
Ruby是一种动态、开源的编程语言,以其简洁、优雅的语法和强大的元编程能力著称。在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build...
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby