Как получить номер последней страницы с помощью soup в python

#beautifulsoup

#beautifulsoup

Вопрос:

Интересно, какой самый лучший способ soup получить номер последней страницы из фрагмента тегов «li«, вот пример:

                 <li class="active">
    <span>1</span>
  </li>

                <li>
    <a href="https://www.test.com/page=2">2</a>
  </li>

                <li>
    <a href="https://www.test.com/page=3">3</a>
  </li>

                <li>
    <a href="https://www.test.com/page=4">4</a>
  </li>


                <li class="pages disabled">
    <span>amp;hellip;</span>
  </li>

      <li class="next">
  <a href="https://www.test.com/page=2">
    <i class="icon-chevron-right"


  ></i>
  </a>
</li>

        <li>
      <a href="https://www.test.com/page=30">Last</a>
  </li>
  

В этом случае мне нужно получить номер последней страницы «30»

Большое вам спасибо. Похожие вопросы видны в SO, но не относятся к моему случаю.

Обновить:

Благодаря ответу Битто.

Приведенный выше источник HTML на самом деле был неточным, поскольку они были скопированы вручную из источника страницы, в моем текущем коде используется что-то с soup, и результирующий набор генерируется, как показано ниже:

Код:

 source = requests.get(url).text
soup = BeautifulSoup(source,features="html.parser").findAll("li")
  

введите описание изображения здесь

Комментарии:

1. Вам нужно получить структуру шаг за шагом, пока вы не получите свой тег привязки (<a href>), а затем получите атрибут с помощью beautfiulsoup. Небольшое наблюдение, которое я сделал, когда использовал beautifulsoup несколько лет назад, заключается в том, что вы не можете использовать сложный селектор, такой как jQuery, в Javascript. Вы должны делать это шаг за шагом, как я упоминал выше (возможно, я ошибаюсь, и я пропустил это)

Ответ №1:

Вы можете найти a тег с текстом 'Last' , а затем получить номер страницы из href атрибута.

 html="""
<li class="active"><span>1</span></li>
<li><a href="https://www.test.com/page=2">2</a></li>
<li><a href="https://www.test.com/page=3">3</a></li>
<li><a href="https://www.test.com/page=4">4</a></li>
<li class="pages disabled"><span>amp;hellip;</span></li>
<li class="next"><a href="https://www.test.com/page=2"><i class="icon-chevron-right"></i></a></li>
<li><a href="https://www.test.com/page=30">Last</a></li>
"""
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'html.parser')
a=soup.find('a',text='Last')
last_page=a['href'].split('=')[1]
print(last_page)
  

Вывод

 30
  

Комментарии:

1. Большое вам спасибо, Битто, здесь чего-то не хватает, пожалуйста, посмотрите мой обновленный OP. Извините за это.

Ответ №2:

Я думаю, что теперь я нашел решение:

 source = requests.get(url).text
soup = BeautifulSoup(source,features="html.parser").findAll("li")
s = str(soup) 
page_info = BeautifulSoup(s[1:len(s)-1]) 
a=page_info.find('a',text='Last') 
last_page=a['href'].split('=')[-1]
  

Спасибо @Bitto.

Ответ №3:

Я бы использовал :contains псевдокласс, чтобы убедиться, что Last он находится в textcontent, и селектор attribute = value, чтобы убедиться, что page= он находится в ссылке

 #html = your html
soup = BeautifulSoup(html, 'lxml')
link = soup.select_one('[href*="page="]:contains(Last)')['href']
page = link.split('=')[1]
print(page, link)
  

Комментарии:

1. Спасибо за ваш вклад. приветствуется здесь.

2. добро пожаловать. Спасибо, что нашли время ответить 🙂