2

我以下列方式使用海葵宝石:

  • 访问第一个 url(种子),将页面内容保存到数据库,并将该页面的所有链接也保存到数据库(所有尚未在数据库中的链接)
  • 从数据库加载下一个链接,再次保存其内容和任何其他链接
  • 如果没有其他链接,再次抓取所有链接(一段时间后)以用新内容覆盖旧内容

这工作得很好,但是有没有可能如何爬取需要登录的页面(如果我知道用户名和密码)?我知道 Mechanize gem 提供填写表格的功能,但我不知道如何将它集成到我的流程中(如果可能的话)。或者有没有其他方法可以抓取登录表单“后面”的页面?

4

2 回答 2

0

您可以使用 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>')
于 2018-06-03T13:04:39.087 回答
0

在您的情况下,我建议使用以下解决方案之一:

因为这两个解决方案允许您填写表格并单击 Web 元素并执行默认 Internet 用户的任何操作。这在机械化宝石的情况下是不可能的。

于 2016-04-19T16:15:00.187 回答