Скрап отображал данные через клик с помощью Selenium и Scrapy. - PullRequest
0 голосов
/ 21 февраля 2019

Я делаю скрипт на python, используя Scrapy, чтобы собрать данные с сайта, используя аутентификацию.Страница, которую я копирую, действительно мучительна, потому что она в основном сделана с использованием запросов javascript и AJAX.Все тело страницы помещено внутрь <form>, что позволяет изменять страницу с помощью кнопки submit.URL не меняется (и это .aspx).

Я успешно сделал, что удалил все данные, которые мне нужны, со страницы 1, затем изменил страницу, нажав на эту кнопку ввода с помощью этого кода:

            yield FormRequest.from_response(response,
            formname="Form",
            clickdata={"class":"PageNext"},
            callback=self.after_login)

Метод after_login очищает данные.Однако мне нужны данные, которые появляются в другом div после нажатия на контейнер с атрибутом onclick.Мне нужно сделать цикл, чтобы щелкнуть по каждому контейнеру, отобразить данные, очистить их, и сразу после этого я перехожу на следующую страницу и выполняю тот же процесс.

Дело в том, что я могу 'Не могу найти способ сделать процесс, в котором «сценарий» просто щелкает по контейнеру с помощью Selenium (при входе в систему, если нет, я не могу перейти на эту страницу), а затем Scrapy собирает данные, которые после выполнения запроса XHR.

Я провел много исследований в Интернете, но не смог найти какое-либо решение.

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Хорошо, так что я почти получил то, что хочу, следуя советам @malberts.Я использовал этот вид кода для получения запроса ответа Ajax:

yield scrapy.FormRequest.from_response(
            response=response,
            formdata={
                    'param1':param1value,
                    'param2':param2value,
                    '__VIEWSTATE':__VIEWSTATE,
                    '__ASYNCPOST':'true',
                   'DetailsId':'123'},
            callback=self.parse_item)

def parse_item(self, response):
    ajax_response = response.body
    yield{'Response':ajax_response}

Ответ должен быть в HTML.Дело в том, что ответ не полностью совпадает с ответом на запрос ответа через Chrome Dev Tools.Я еще не учел все данные формы (~ 10/25), может быть, нужны все данные формы, даже если они не меняются в зависимости от идентификатора?

Спасибо!

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