Как обойти подтверждение возрастной модели с помощью скрапа - PullRequest
0 голосов
/ 18 сентября 2018

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

driver.find_element_by_xpath('xpath').click()

, чтобы обойти это окно подтверждения возраста.Честно говоря, я не хочу использовать селеновый вебдрайвер из-за его затрат времени.Есть ли способ обойти это окно?Я много искал в stackoverflow и google, но не получил ответа, который может решить мою проблему.Если у вас есть какая-либо ссылка или идея разрешения проблемы с помощью Scrapy, это будет оценено.Один полезный комментарий будет одобрен!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Чтобы расширить ответ Чилли.

Проверка возраста здесь неактуальна. Данные, которые вы ищете, загружаются по запросу AJAX:

enter image description here

См. Связанный вопрос: Можно ли использовать скэппинг для очистки динамического контента с веб-сайтов, использующих AJAX? , чтобы понять, как они работают.

Вам необходимо выяснить, как работает https://ns5bwtai8m-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.19.1&x-algolia-application-id=NS5BWTAI8M&x-algolia-api-key=e676b05f3844d3adf54a29732af6e43c URL-адрес и как вы можете получить в нем scrap.

0 голосов
/ 18 сентября 2018

Но «окно» проверки возраста - это просто div, которое скрывается при нажатии кнопки, а не отдельное окно:

<div class="age-check-modal" id="age-check-modal">

Вы можете использовать вкладку «Сеть» браузера в инструментах разработчика, чтобы увидеть, что при нажатии кнопки новая информация не загружается и не отправляется. Так что все уже загружено, когда вы запрашиваете страницу. «Всплывающее окно» - это даже не всплывающее окно, а элемент, чей display изменяется при нажатии кнопки на none.

Так что Scrapy действительно не волнует, что должно отображаться, пока загружен весь html. Если элементы загружены, они доступны. Или вы видели, что какая-то информация была недоступна без нажатия кнопки?

Вам следует больше ознакомиться с html-кодом, чтобы увидеть, что делает каждый веб-сайт, это может упростить выполнение ваших задач.

Редактировать: После проверки исходного HTML вы можете увидеть следующее:

<div class="products-list">
    <div class="products-container-block">
      <div class="products-container">
        <div id="hits" class='row'>
        </div>
      </div>
    </div>
  </div>

Вы также можете увидеть множество тегов JS-скриптов.

Инспектор элементов браузера показывает нам следующее: enter image description here

Часть ::before сообщает, что этим манипулировал JS, поскольку вы не можете сделать это с помощью простого CSS. Подробнее см. ответ Granitosaurus .

Это означает, что вам нужно каким-то образом выполнить произвольный код JS на этих страницах. Поэтому вам нужно либо решение с помощью Scrapy, либо просто использовать Selenium, как это делают многие, и как вы уже сделали.

...