Href не виден в результате scrapy, но виден в html - PullRequest
0 голосов
/ 16 ноября 2018

Настройка

У меня есть элемент кнопки следующей страницы из этой страницы ,

<li class="Pagination-item Pagination-item--next  Pagination-item--nextSolo ">
                        <button type="button" class="Pagination-link js-veza-stranica kist-FauxAnchor" data-page="2" data-href="https://www.njuskalo.hr/prodaja-kuca?page=2" role="link">Sljedeća&nbsp;<span aria-hidden="true" role="presentation">»</span></button>
                    </li>

Мне нужно получить URL в атрибуте data-href.


Код

Используя следующий простой xpath к элементу кнопки в оболочке scrapy,

response.xpath('//*[@id="form_browse_detailed_search"]/div/div[1]/div[5]/div[1]/nav/ul/li[8]/button').extract_first()                        

Я получаю,

'<button type="button" class="Pagination-link js-veza-stranica" data-page="2">Sljedeća\xa0<span aria-hidden="true" role="presentation">»</span></button>'

Вопрос

Куда делся атрибут data-href?

Как мне получить URL?

1 Ответ

0 голосов
/ 16 ноября 2018

Атрибут data-href, скорее всего, рассчитывается по некоторому коду JavaScript, запущенному в вашем браузере.Если вы посмотрите на исходный код этой страницы (опция «просмотреть исходный код» в вашем браузере), вы не найдете там этого атрибута.

Вывод, который вы видите в инструментах разработчика, - это DOM, представленныйваш браузер, так что вы можете ожидать различий между вашим видом браузера и тем, что на самом деле выбирает Scrapy (который является необработанным исходным кодом HTML).Имейте в виду, что Scrapy не выполняет никакого кода JavaScript.

В любом случае, для решения этой проблемы было бы создание URL-адреса нумерации страниц на основе атрибута data-page:

from w3lib.url import add_or_replace_parameter
...

next_page = response.css('.Pagination-item--nextSolo button::attr(data-page)').get()
next_page_url = add_or_replace_parameter(response.url, 'page', next_page)

w3lib - это библиотека с открытым исходным кодом: https://github.com/scrapy/w3lib

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