如何使用ruby Mechanize gem

时间:2016-07-04 09:04:13

标签: ruby nokogiri mechanize-ruby

我试图了解ruby Mechanize gem的用法,我可以从中填写表格并登录网站。但是我无法在登录后提取。基本上该网站仅在登录后显示数据,否则显示一些默认字符串。例如:'查看网站'而不是www.example.com

我尝试编写此代码:

#code to login
require 'mechanize'
require 'logger'
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'zlib'

mechanize = Mechanize.new

login = mechanize.get('website login page')
form = login.forms.first
form['student_email'] = 'email@gmail.com'
form['student_password'] = 'password'
result = form.submit
puts result.code
puts "logged in"

#code to extract
url = 'data_path_url'
    doc = Nokogiri::HTML(open(url))
    paths = doc.css('.college_name a')  #capturing the link to extract.
    paths.each do |path|
        path = path['href']
        path = path.to_s
        page = Nokogiri::HTML(open(path))
        data = page.css('.font11.bold') #data to extract
        puts data.text #data to display.

    end

我仍然在没有登录的情况下获得默认字符串。如果有人能帮助我使用此代码保留在会话中直到提取完成,我会很高兴。

1 个答案:

答案 0 :(得分:0)

当您尝试使用Nokogiri打开URL时,服务器将其视为新请求,并且需要对该用户进行身份验证,因此,您需要捕获cookie并在每次请求时发送它们。

然而,实现结果的更简单方法是使用机械化进行刮削。由于它建立在Nokogiri上,Nokogiri方法也可用于机械化。

这是对使用Mechanize

进行刮擦的代码的修改
agent = Mechanize.new

在您的情况下,您可以使用'mechanize'代替代理。

#code to extract data

doc = agent.get('data_path_url')
paths = doc.css('.college_name a')  #capturing the link to extract.
paths.each do |path|
    path = path['href']
    path = path.to_s
    page = agent.get('path')
    data = page.css('.font11.bold') #data to extract
    puts data.text #data to display.
end

这里的关键是继续使用您创建的mechanize实例进行抓取,因为它已在服务器上有一个活动会话。