我试图了解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
我仍然在没有登录的情况下获得默认字符串。如果有人能帮助我使用此代码保留在会话中直到提取完成,我会很高兴。
答案 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实例进行抓取,因为它已在服务器上有一个活动会话。