Как использовать 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. Они чередуют два типа запросов: вставка некоторых данных и нажатие "Далее" для перехода на следующую страницу.
Ответы
Ответ 1
Фактическая методология будет следующей:
- Отправьте свой запрос на страницу (как вы это делаете)
- Извлеките ссылку на следующую страницу из этого конкретного ответа
- Простой запрос на следующую страницу, если это возможно, или снова использовать FormRequest в применимых
Все это должно быть упорядочено с помощью механизма ответа сервера, например:
- Вы можете попробовать использовать
dont_click = true
в FormRequest.from_response
- Или вы можете обработать перенаправление (302), поступающее с сервера (в этом случае вам нужно будет указать в метате, для которого требуется, чтобы запрос перенаправления дескриптора также отправлялся на обратный вызов.)
Теперь, как понять все:
Используйте веб-отладчик, например, скрипач или вы можете использовать FireBug для Firefox, или просто нажать F12 в IE 9; и проверить запросы, которые пользователь фактически делает на веб-сайте, так же, как вы просматриваете веб-страницу.
Ответ 2
Я построил быстрый искатель, который выполняет JS через селен. Не стесняйтесь копировать/изменять https://github.com/rickysahu/seleniumjscrawl