2016-06-28 9 views
0

Я строю очень простой скребок, используя scrapy, чтобы очистить определенный элемент от набора URL-адресов. Тем не менее, я должен быть зарегистрирован на веб-сайте, чтобы сделать это, и я не могу получить часть входа в мой скребок.Scrapy - Manual Login

Можно ли войти на сайт вручную, а затем позволить моему скребку выполнить задачу очистки?

+1

Что вы пробовали? Вы прочитали [документацию, связанную с выполнением входа в систему] (http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-request-userlogin)? –

+0

Да, конечно, у меня есть. Тем не менее, я думаю, что класс FormRequest отлично не обрабатывает все скрытые поля ввода. И так как остальная часть соскабливания довольно прямолинейна, и ее нужно выполнить только один раз, ручной вход в систему выглядит наиболее эффективным способом. – OutOfTheBox

+0

_However, я думаю, что класс FormRequest отлично обрабатывает все скрытые поля ввода. Почему вы так думаете? у вас есть образец ввода и тестовый код, показывающий проблему? Трудно помочь вам без доказательства того, что что-то не работает, как вы ожидаете. Документы говорят, что это возможно (и я использовал его сам иногда), поэтому должно быть что-то особенное или неочевидное в вашем случае использования. –

ответ

0

Я понимаю, что вы просите, но вы просто не можете «вручную войти» с помощью scrapy, вам нужно наложить на него куки.

Лучший способом я вижу, чтобы сделать это с помощью Selenium для входа и дайте ему создать печенье, чтобы кормить Scrapy вот как:

def get_cookies(self): 
    driver = webdriver.Firefox() 
    base_url = "http://www.example.com/login" 
    driver.get(base_url) 
    #Code to login 
    driver.find_element_by_name("username").send_keys("my_username") 
    driver.find_element_by_name("password").send_keys("my_password") 
    driver.find_element_by_name("submit").click() 
    #get the cookies created 
    cookies = driver.get_cookies() 
    driver.close() 
    return cookies 

def parse(self, response): 
    return Request(url="http://my_domain.com/", 
    cookies=self.get_cookies(), 
    callback=self.login) 

def login(self, response): 
    #You'll have the cookies here 

кода может потребоваться некоторые настройки здесь и там, но это общее идея

+0

Спасибо, что ответили на мой вопрос. В конце концов мне удалось заставить логин работать, используя FormRequest.from_response(). Мне не нужно было ничего делать с куки. Однако для моего случая использования ручной вход в систему был бы более эффективным, потому что мне нужно было только запустить скребок. – OutOfTheBox