Как добавить атрибут в селектор CSS, чтобы указать конкретную ссылку на страницы? - PullRequest
0 голосов
/ 08 июня 2018

Я только что попал в Scrapy, и я знаю, что это вопрос Noob, но Как мне добавить атрибут, чтобы указать конкретную ссылку на нумерацию страниц?

вот HTML-код с элементом, на который я нацеливаюсь.

`<div class="pagination">
<a rel="prev" href="/collections/all?page=1" class="fa fa-chevron-left prev pagination-icon"></a>
<ul>
                <li class="pagination-icon">
            <a href="/collections/all?page=1" title="">1</a>
            </li>
                <li class="pagination-icon pagination-icon--current">
            2
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=3" title="">3</a>
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=4" title="">4</a>
            </li>
                <li class="pagination-icon pagination-icon--current">
            …
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=50" title="">50</a>
            </li>
</ul>

Мне нужно перейти по ссылке в этой строке

<a rel="next" href="/collections/all?page=3" class="fa fa-chevron-right next pagination-icon"></a>

Вот мой код Scrap

            next_page = response.css('div.pagination a::attr(href)').extract_first()
    if next_page is not None:
        yield response.follow(next_page, callback=self.parse)

Что происходит, это егопереходим по этой ссылке вместо другой, потому что она является первой в классе «нумерация страниц»

 <a rel="prev" href="/collections/all?page=1" class="fa fa-chevron-left prev pagination-icon"></a>

Я вижу два отличия между атрибутами двух ссылок, обе в классе «нумерация страниц»

  1. Атрибут Rel отличается, мне нужен атрибут со «следующим»
  2. Атрибут класса отличается, мне нужно «fa fa-chevron-right next pagination-icon»

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

  1. div.pagination a.fa fa-chevron-right next pagination-icon a :: attr (href) не работает
  2. a.fa fa-chevron-right следующий pagination-icon a :: attr (href) не работает
  3. a.fa fa-chevron-right next pagination-icon :: attr (href) не работает

Как мне достичь своей цели?Почему ни один из селекторов CSS, которые я пробовал, не работает?

1 Ответ

0 голосов
/ 08 июня 2018

Вы не можете выбрать несколько классов с одной точкой.Либо объедините каждую из них с точками, либо используйте синтаксис "[class='fa fa-chevron-right next pagination-icon']".Однако, если какой-либо класс из них генерируется динамически, селектор сломается.

Затем попробуйте с этим посмотреть, что произойдет.

response.css('div.pagination a[rel="next"]::attr(href)').extract_first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...