Страница сканирования, требующая входа с помощью Anemone
Я использую камень Анемон следующим образом:
- Посетите первый URL (начальное число), сохраните содержимое страницы в базе данных и сохраните все ссылки с этой страницы в базу данных (все ссылки, которых еще нет в базе данных)
- Загрузить следующую ссылку из базы данных, сохранить ее содержимое и любые другие ссылки снова
- Если другой ссылки нет, просканируйте все ссылки еще раз (через некоторое время), чтобы перезаписать старый контент новым.
Это работает довольно хорошо, но есть ли возможность, как сканировать страницы, требующие входа в систему (если я знаю имя пользователя и пароль)? Я знаю Mechanize gem, который предоставляет функциональность для заполнения форм, но я не знаю, как интегрировать его в свой процесс (если это возможно). Или есть какой-то другой способ, как сканировать страницы "за" формой входа?
2 ответа
Вы можете использовать механизировать, чтобы автоматизировать процесс входа в систему, а затем продолжить сеанс, чтобы делать то, что вы хотите.
Вот мой пример кода:
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>')
В вашем случае я предлагаю использовать одно из следующих решений:
- Драгоценный камень Selenium Webdriver https://github.com/SeleniumHQ/selenium/tree/master/rb
- PhantomJS http://phantomjs.org/
Потому что эти два решения позволяют вам заполнять формы и переходить по веб-элементам, а также делать что-либо по умолчанию для пользователей Интернета. Это невозможно в случае Механизации драгоценного камня.