Atc*_*ava 5 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
Run Code Online (Sandbox Code Playgroud)
我仍然获得默认字符串,我必须在不登录的情况下获得这些字符串。如果有人可以帮助我使用此代码以留在会话中直到提取完成,我会很高兴。
当您尝试使用 Nokogiri 打开 URL 时,服务器会将其视为新请求,并且需要验证该用户的身份,因此,您需要捕获 cookie 并在每个请求上发送它们。
然而,实现这一结果的更简单方法是使用机械化进行刮削。由于它是基于 Nokogiri 构建的,并且 Nokogiri 方法也可以在 mechanize 中使用。
这是对代码的修改,以便使用 Mechanize 进行抓取
agent = Mechanize.new
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以使用“机械化”代替代理。
#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
Run Code Online (Sandbox Code Playgroud)
这里的关键是继续使用您创建的 mechanize 实例进行抓取,因为它已经在服务器上有一个活动会话。
| 归档时间: |
|
| 查看次数: |
4659 次 |
| 最近记录: |