#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. добро пожаловать. Спасибо, что нашли время ответить 🙂