Интересно, как лучше всего суп получить номер последней страницы из фрагмента тегов "ли", вот пример:
<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>…</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
с текстом '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>…</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. Извини за это.
Кажется, теперь я понял решение:
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)
Спасибо за ваш вклад. ценится здесь.
Добро пожаловать. Спасибо, что нашли время ответить :-)
Вам нужно получить структуру шаг за шагом, пока вы не получите тег привязки (<a href>), а затем получите атрибут с помощью beautfiulsoup. Несколько лет назад, когда я использовал BeautifulSoup, я сделал небольшое наблюдение: вы не можете использовать сложный селектор, такой как JQuery, в Javascript. Вы должны делать это шаг за шагом, как я упоминал выше (может быть, я ошибаюсь и неправильно использовал это)