Подтвердить что ты не робот

Как использовать CrawlSpider из scrapy, чтобы щелкнуть ссылку с javascript onclick?

Я хочу, чтобы scrapy сканировал страницы, где переход к следующей ссылке выглядит следующим образом:

<a href="#" onclick="return gotoPage('2');"> Next </a>

Может ли scrapy интерпретировать код javascript?

С расширением livehttpheaders я узнал, что нажатие Next создает POST с действительно огромным куском "мусора", начинающимся вот так:

encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n

Я пытаюсь создать свой паук в классе CrawlSpider, но я не могу понять, как его кодировать, с помощью BaseSpider я использовал метод parse() для обработки первого URL-адреса, что происходит с быть формой входа, где я сделал POST с:

def logon(self, response):
    login_form_data={ 'email': '[email protected]', 'password': 'mypass22', 'action': 'sign-in' }
    return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]

И затем я определил submit_next(), чтобы сказать, что делать дальше. Я не могу понять, как сообщить CrawlSpider, какой метод использовать по первому URL?

Все запросы в моем обходе, за исключением первого, являются запросами POST. Они чередуют два типа запросов: вставка некоторых данных и нажатие "Далее" для перехода на следующую страницу.

4b9b3361

Ответ 1

Фактическая методология будет следующей:

  • Отправьте свой запрос на страницу (как вы это делаете)
  • Извлеките ссылку на следующую страницу из этого конкретного ответа
  • Простой запрос на следующую страницу, если это возможно, или снова использовать FormRequest в применимых

Все это должно быть упорядочено с помощью механизма ответа сервера, например:

  • Вы можете попробовать использовать dont_click = true в FormRequest.from_response
  • Или вы можете обработать перенаправление (302), поступающее с сервера (в этом случае вам нужно будет указать в метате, для которого требуется, чтобы запрос перенаправления дескриптора также отправлялся на обратный вызов.)

Теперь, как понять все: Используйте веб-отладчик, например, скрипач или вы можете использовать FireBug для Firefox, или просто нажать F12 в IE 9; и проверить запросы, которые пользователь фактически делает на веб-сайте, так же, как вы просматриваете веб-страницу.

Ответ 2

Я построил быстрый искатель, который выполняет JS через селен. Не стесняйтесь копировать/изменять https://github.com/rickysahu/seleniumjscrawl