Как использовать CrawlSpider от scrapy, чтобы щелкнуть ссылку с помощью javascript onclick? - PullRequest
24 голосов
/ 16 марта 2010

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

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

Сможет ли скрапить интерпретировать код Javascript?

С расширением livehttpheaders Я обнаружил, что нажатие кнопки Далее генерирует POST с действительно огромным фрагментом «мусора», начинающимся так:

encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n

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

def logon(self, response):
    login_form_data={ 'email': 'user@example.com', '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. Они чередуют два типа запросов: вставляют некоторые данные и нажимают «Далее», чтобы перейти на следующую страницу.

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

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

  1. Разместите свой запрос для перехода на страницу (как вы делаете)
  2. Извлечение ссылки на следующую страницу из этого конкретного ответа
  3. Просто запросите следующую страницу, если это возможно, или снова используйте FormRequest в соответствующем

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

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

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

0 голосов
/ 27 июля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...