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

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

                <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>&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 на самом деле был не точный, поскольку они были вручную скопированы из источника страницы, то, что используется в моем текущем коде, - это что-то с супом, и ResultSet генерируется, как показано ниже:

Код:

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

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

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

Disfigure 07.04.2019 00:27
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
3
1
201
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете найти тег 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>&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

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

mdivk 07.04.2019 04:29

Кажется, теперь я понял решение:

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.

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

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

Спасибо за ваш вклад. ценится здесь.

mdivk 07.04.2019 13:44

Добро пожаловать. Спасибо, что нашли время ответить :-)

QHarr 07.04.2019 13:45

Другие вопросы по теме