Как получить номер последней страницы с супом в Python - PullRequest
3 голосов
/ 07 апреля 2019

Интересно, какой лучший суп способ извлечь номер последней страницы из фрагмента тегов " 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>&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")

enter image description here

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Кажется, я нашел решение сейчас:

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]

Спасибо @ Битто.

0 голосов
/ 07 апреля 2019

Я бы использовал :contains класс psuedo, чтобы гарантировать, что 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)
0 голосов
/ 07 апреля 2019

Вы можете найти тег 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...