用Ruby抓取百度博客

每个用户的博客都有各自的样式,页面都比较杂乱。我想采用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的右边(也就是结束处)开始查找,不过返回的值却是从左边数起的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值