Ruby on rails 需要使用海葵登录的爬网页面
我使用海葵宝石的方式如下:Ruby on rails 需要使用海葵登录的爬网页面,ruby-on-rails,ruby,web-crawler,mechanize-ruby,anemone,Ruby On Rails,Ruby,Web Crawler,Mechanize Ruby,Anemone,我使用海葵宝石的方式如下: 访问第一个url(seed),将页面内容保存到数据库,并将此页面的所有链接也保存到数据库(所有尚未在数据库中的链接) 从数据库加载下一个链接,再次保存其内容和任何其他链接 如果没有其他链接,请再次爬网所有链接(在一段时间后),以用新链接覆盖旧内容 这工作得很好,但有没有可能如何抓取需要登录的页面(如果我知道用户名和密码)?我知道Mechanize gem提供了填写表单的功能,但我不知道如何将其集成到我的流程中(如果可能的话)。或者有没有其他方法可以在登录表单后面抓
- 访问第一个url(seed),将页面内容保存到数据库,并将此页面的所有链接也保存到数据库(所有尚未在数据库中的链接)
- 从数据库加载下一个链接,再次保存其内容和任何其他链接
- 如果没有其他链接,请再次爬网所有链接(在一段时间后),以用新链接覆盖旧内容
这工作得很好,但有没有可能如何抓取需要登录的页面(如果我知道用户名和密码)?我知道Mechanize gem提供了填写表单的功能,但我不知道如何将其集成到我的流程中(如果可能的话)。或者有没有其他方法可以在登录表单后面抓取页面?在您的情况下,我建议使用以下解决方案之一:
- Selenium Webdriver gem
- 幻影
因为这两个解决方案允许您填写表单并单击web元素,以及执行任何默认internet用户的操作。这在Mechanize gem的情况下是不可能的。您可以使用Mechanize自动化登录过程,然后保持其会话以执行下一步所需的操作 以下是我的示例代码:
require 'mechanize'
module YourModuleName
class YourClassName
attr_reader :agent
def call
@agent = Mechanize.new
page = @agent.get(@login_page)
form = page.forms.first
form.field_with(id: LoginConstant::CSS[:user_email]).value =
LoginConstant::USER_NAME
form.field_with(id: LoginConstant::CSS[:user_password]).value = LoginConstant::PASSWORD
form.submit
self
end
end
end
然后在您的代码中爬网一个请求登录的页面,如下所示:
response = YourModuleName::YourClassName.new('<your_login_page>').call
response.agent.get('<your_page_to_want_cralwer>')
response=YourModuleName::YourClassName.new('').call
response.agent.get(“”)