извлечь элемент из объявления html - PullRequest
0 голосов
/ 29 мая 2019

Я использую селекторы scrapy и пытаюсь извлечь элемент "1" из объявления HTML ниже:

<li aria-label="Pagina" class="page active"><a href="#">1</a></li>

У меня есть два одинаковых объявления во всем исходном HTML-контенте.


<div class="row paging-bar">
    <ul class="sync-pagination pagination pull-right">
       <li aria-label="Pagina" class="prev"><a href="#">&lt;</a></li>
       <li aria-label="Pagina" class="page active"><a href="#">1</a></li>
       <li aria-label="Pagina" class="page"><a href="#">2</a></li>
       <li aria-label="Pagina" class="page"><a href="#">3</a></li>
       <li aria-label="Pagina" class="page"><a href="#">4</a></li>
       <li aria-label="Pagina" class="page"><a href="#">5</a></li>
       <li aria-label="Pagina" class="page"><a href="#">6</a></li>
       <li><span>...</span></li>
       <li aria-label="Pagina" class="page"><a href="#">1405</a></li>
      <li aria-label="Pagina" class="next"><a href="#">&gt;</a></li>
    </ul>
</div>

<div class="row paging-bar">
    <ul class="sync-pagination pagination pull-right">
       <li aria-label="Pagina" class="prev"><a href="#">&lt;</a></li>
       <li aria-label="Pagina" class="page active"><a href="#">1</a></li>
       <li aria-label="Pagina" class="page"><a href="#">2</a></li>
       <li aria-label="Pagina" class="page"><a href="#">3</a></li>
       <li aria-label="Pagina" class="page"><a href="#">4</a></li>
       <li aria-label="Pagina" class="page"><a href="#">5</a></li>
       <li aria-label="Pagina" class="page"><a href="#">6</a></li>
       <li><span>...</span></li>
       <li aria-label="Pagina" class="page"><a href="#">1405</a></li>
       <li aria-label="Pagina" class="next"><a href="#">&gt;</a></li>
    </ul>
</div></div>

Я попробовал команду:

response.xpath("normalize-space(//li[@class='page active']/a[@href]/text())").extract_first()

но вернулась пустая строка.

1 Ответ

0 голосов
/ 29 мая 2019

Работает.

>>> html = """
... <div class="row paging-bar">
...     <ul class="sync-pagination pagination pull-right">
...        <li aria-label="Pagina" class="prev"><a href="#">&lt;</a></li>
...        <li aria-label="Pagina" class="page active"><a href="#">1</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">2</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">3</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">4</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">5</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">6</a></li>
...        <li><span>...</span></li>
...        <li aria-label="Pagina" class="page"><a href="#">1405</a></li>
...       <li aria-label="Pagina" class="next"><a href="#">&gt;</a></li>
...     </ul>
... </div>
... """
>>> from parsel import Selector
>>> selector = Selector(text=html)
>>> selector.xpath("normalize-space(//li[@class='page active']/a[@href]/text())").extract_first()
'1'
>>> html = """
... <div class="row paging-bar">
...     <ul class="sync-pagination pagination pull-right">
...        <li aria-label="Pagina" class="prev"><a href="#">&lt;</a></li>
...        <li aria-label="Pagina" class="page active"><a href="#">1</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">2</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">3</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">4</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">5</a></li>
...        <li aria-label="Pagina" class="page"><a href="#">6</a></li>
...        <li><span>...</span></li>
...        <li aria-label="Pagina" class="page"><a href="#">1405</a></li>
...        <li aria-label="Pagina" class="next"><a href="#">&gt;</a></li>
...     </ul>
... </div></div>
... """
>>> selector = Selector(text=html)
>>> selector.xpath("normalize-space(//li[@class='page active']/a[@href]/text())").extract_first()
'1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...