Ruby 爬 ruby-china,为什么浏览器看到的和爬到的不一样?

tinyfeng · 2018年08月15日 · 最后由 tinyfeng 回复于 2018年08月15日 · 2064 次阅读
require 'nokogiri'
require 'rest-client'
def print_title url
  begin  
    res = RestClient.get url
    doc = Nokogiri::HTML res.body
    doc.css('.title a').each do |i|
      puts i.attributes['title'].value
    end
    puts '-' * 100
  rescue
    puts "invalid url"
  end
end

puts 'Please input url, and enter "e" to exit.'
while 'e' != url = gets.chomp!
  print_title url
end

比如去爬https://ruby-china.org/topics?page=60,感觉浏览器访问的时候被过滤了一些数据....

爬到的数据应该比浏览器访问的多,导致分页页数大了以后,顶部出现了浏览器访问到的 59 页的东西

ruby-china截图

爬到的数据

因为有新帖子出现把整体向后推了

zj0713001 回复

同时刷的,并且两边都重试了好几次。

找到了一个示例,这爬的第二页数据,其中topic/38279,浏览器访问的时候不见了

你这个是所有的代码吗,我用你这个运行没反应呀

CaiAAA 回复

直接在 irb 里输入都能用吧,不过前提你装了那两个 gem,不然会报错

我新手,require 'nokogiri' require 'rest-client' 这部分是怎么写的呀,求大佬分享一下

CaiAAA 回复

那是两个 gem 包,你在 shell 下安装对应的 gem 包

$ gem install nokogiri
$ gem install rest-client

在 ruby 里 require 对应的 gem,就可以使用对应的包,去看一下https://guides.rubygems.org/what-is-a-gem/

tinyfeng 回复

安装了 gem,运行后还是一样的,输入 e 退出了。

CaiAAA 回复

输入 e 是退出,没问题吧

Please input url, and enter "e" to exit.

11 楼 已删除
CaiAAA 回复
while 'e' != url = gets.chomp!
  print_title url
end

url 需要你自己输入

tinyfeng 回复

好的,多谢大佬教导了

CaiAAA 回复

我也是新手,互相学习。

是不是个人屏蔽了一些用户。

Rei 回复

还真是,不知道什么时候的误操作,我也没想着登出看看...

tinyfeng 关闭了讨论。 08月15日 15:14
需要 登录 后方可回复, 如果你还没有账号请 注册新账号