Сложность использования Xpath / CSS при очистке - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь удалить этот сайт:

https://www.coolblue.nl/en/our-assortment

Я собираю список всех URL-адресов для категорий продуктов.Я могу получить почти все из них.По какой-то причине эти вкладки «Еще…» получить очень сложно.

Я считаю, что это как-то связано с моими селекторами.На данный момент я пытаюсь получить эти конкретные URL «More ..» в оболочке, просто чтобы выяснить, как правильно их выбрать.Например, в разделе «Ноутбуки, настольные компьютеры и мониторы» в категории «Еще ..» есть href = "/ en / laptops-desktops-monitors".Он идет после категории «Мониторы» с href = "/ en / monitors".

Вот что я пытаюсь сделать.

Я открываю оболочку scrapy:

scrapy shell https://www.coolblue.nl/en/our-assortment

и затем я пытаюсь выбрать то, что я хочу по индексу.Я пробовал Xpath и CSS по-разному:

>>> response.xpath("//a[@class='category-navigation--link']/@href")[3].getall()
['/en/monitors']
>>> response.xpath("//a[@class='category-navigation--link']/@href")[4].getall()
['/en/keyboards']

>>> response.xpath("//a[contains(@class, 'category-navigation--link')]/@href")[3].getall()
['/en/monitors']
>>> response.xpath("//a[contains(@class, 'category-navigation--link')]/@href")[4].getall()
['/en/keyboards']

>>> response.css("a.category-navigation--link::attr('href')")[3].getall()
['/en/monitors']
>>> response.css("a.category-navigation--link::attr('href')")[4].getall()
['/en/keyboards']

Как видите, он перешел из категории «Мониторы» в категорию «Клавиатуры», и я не знаю почему.Четвёртый индекс должен иметь значение «/ en / laptops-desktops-monitors», которого больше нет в этом списке, потому что я его уже искал.

Это должно показать в этом 4-м индексе, но это не ... какие-либо идеи, что происходит?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Причина, по которой вы не можете получить Laptops, desktops & monitors, заключается в том, что эта ссылка не имеет класса category-navigation--link.Используйте приведенный ниже xpath для получения заголовков категорий и ссылок навигации.

//a[@class='category-navigation--link' or parent::h3[@class='product-category-navigation__title']]/@href
0 голосов
/ 14 марта 2019

По какой-то причине эти ссылки «Больше» не всегда отображаются на странице: enter image description here

Я также получаю это: enter image description here

Обратите внимание, что в одной версии он имеет ссылки «Еще», в другой версии заголовки являются ссылками. Всякий раз, когда я очищаю кеш, я получаю вторую версию. Scrapy также, похоже, получает версию без ссылок «More».

Вместо этого я бы предложил вам получить ссылки из меню (даже если они кажутся вам скрытыми).

Вот как можно получить (синие) ссылки на заголовки в меню «Компьютеры и планшеты»:

>>> response.css('#computers-tablets .product-category-navigation__title a::attr("href")').getall()
['/en/laptops-desktops-monitors', '/en/peripherals', '/en/tablets-ereaders', '/en/computer-parts', '/en/printers-scanners', '/en/memory-storage', '/en/network-internet', '/en/gaming']

Вот как вы можете получить ссылки под каждым заголовком:

>>> response.css('#computers-tablets .category-navigation--item a::attr("href")').getall()
['/en/laptops', '/en/laptops/apple-macbook', '/en/desktops', '/en/monitors', '/en/keyboards', '/en/mouses', '/en/office-supplies', '/en/tablets', '/en/tablets/apple-ipad', '/en/e-readers', '/en/tablet-covers', '/en/internal-hard-drives', '/en/internal-ssd', '/en/video-cards', '/en/ram', '/en/printers', '/en/scanners', '/en/cartridges', '/en/toners', '/en/external-hard-drives', '/en/external-ssds', '/en/memory-cards', '/en/nas', '/en/routers', '/en/powerline-adapters', '/en/network-switches', '/en/wifi-repeaters', '/en/consoles', '/en/video-games', '/en/gaming-headsets', '/en/vr-gear']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...