Scrapy linkextractor игнорирует параметры за знаком # и, следовательно, не будет переходить по ссылке - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь сканировать веб-сайт со скрапбу, где нумерация страниц стоит за знаком "#". Это каким-то образом заставляет скрапы игнорировать все, что стоит за этим персонажем, и всегда будет видеть только первую страницу.

например:

http://www.rolex.de/de/watches/find-rolex.html#g=1&p=2

Если вы введете вопросительный знак вручную, сайт загрузит страницу 1

http://www.rolex.de/de/watches/find-rolex.html?p=2

Статистика из скрапа говорит мне, что она принесла первую страницу:

ОТЛАДКА: Сканировано (200) http://www.rolex.de/de/watches/datejust/m126334-0014.html> (реферер: http://www.rolex.de/de/watches/find-rolex.html)

Мой сканер выглядит так:

start_urls = [
    'http://www.rolex.de/de/watches/find-rolex.html#g=1',
    'http://www.rolex.de/de/watches/find-rolex.html#g=0&p=2',
    'http://www.rolex.de/de/watches/find-rolex.html#g=0&p=3',
]

rules = (
    Rule(
        LinkExtractor(allow=['.*/de/watches/.*/m\d{3,}.*.\.html']), 
        callback='parse_item'
    ),       
    Rule(
        LinkExtractor(allow=['.*/de/watches/find-rolex(/.*)?\.html#g=1(&p=\d*)?$']), 
        follow=True
    ),
)

Как сделать так, чтобы scrap игнорировал # внутри URL и посещал указанный URL?

1 Ответ

0 голосов
/ 11 января 2019

Scrapy выполняет HTTP-запросы. Данные после '#' в URL не являются частью HTTP-запроса, они используются JavaScript.

Как предлагается в комментариях, сайт загружает данные с использованием AJAX.

Более того, он не использует разбиение на страницы в AJAX: сайт загружает весь список часов в формате JSON за один запрос, а затем разбиение на страницы выполняется с использованием JavaScript.

Таким образом, вы можете просто использовать вкладку Сеть инструментов разработчика вашего веб-браузера, чтобы просмотреть запрос, который получает данные JSON, и выполнить аналогичный запрос вместо запроса страницы HTML.

Обратите внимание, однако, что вы не можете использовать LinkExtractor для данных JSON. Вам просто нужно проанализировать ответ с помощью json в Python и повторить там URL-адреса.

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