Ошибка индекса при создании новостных веб-сайтов

#python #web-scraping #beautifulsoup

#python #очистка веб-страниц #beautifulsoup

Вопрос:

Я пытался очистить заголовки новостных статей в Интернете, но я сталкиваюсь с «Ошибкой индекса» при следующем коде. Я сталкиваюсь с проблемой только в последней строке кода.

 import requests
from bs4 import BeautifulSoup
URL= 'https://www.ndtv.com/coronavirus?pfrom=home-mainnavgation'
r1 = requests.get(URL)
coverpage = r1.content
soup1 = BeautifulSoup(coverpage, 'html5lib')
coverpage_news = soup1.find_all('h3', class_='item-title')
coverpage_news[4].get_text()

  

Это ошибка:

 IndexError                                Traceback (most recent call last)
<ipython-input-10-f7f1f6fab81c> in <module>
      6 soup1 = BeautifulSoup(coverpage, 'html5lib')
      7 coverpage_news = soup1.find_all('h3', class_='item-title')
----> 8 coverpage_news[4].get_text()

IndexError: list index out of range

  

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

1. Это означает, что на странице нет 5 элементов, которые удовлетворяют критериям, которые вы ищете.

2. Я не вижу ничего <h3 class="item-title"> на этой странице.

3. Я понимаю <h3 class="dr-advice_title"> , это то, что вы ищете? Я также вижу много <a ... class="item-title">

4. Кроме <h3 class="list-txt"> того, они содержат <a class="item-title">

5. Итак, что именно вы пытаетесь извлечь?

Ответ №1:

Используется soup1.select() для поиска вложенных элементов, соответствующих селектору CSS:

 coverpage_news = soup1.select("h3 a.item-title")
  

Это позволит найти a элемент, class="item-title" который является потомком h3 элемента.

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

1. этот код дает мне только один результат, но я хочу очистить все заголовки веб-страницы

2. Он должен найти все совпадения. select_one() возвращает только первое совпадение.

Ответ №2:

Попробуйте изменить:

 coverpage_news = soup1.find_all('h3', class_='item-title')
  

Для

 coverpage_news = soup1.find_all('h3', class_='list-txt')
  

Ответ №3:

Немного изменив полезный ответ @ Barmar’а, чтобы показать все заголовки:

 coverpage_news = soup1.select("h3 a.item-title")
for link in coverpage_news:
  print(link.text)
  

Вывод:

 US Covid Infections Cross 9 Million, Record 1-Day Spike Of 94,000 Cases
Johnson amp; Johnson Plans To Test COVID-19 Vaccine On Youngsters Soon
Global Stock Markets Decline As Coronavirus Infection Rate Weighs
Cristiano Ronaldo Recovers From Coronavirus
Reliance's July-September Profit Falls 15% As Covid Slams Oil Business
"Likely To Know By December If We'll Have Covid Vaccine": Top US Expert
With No Local Case In A Record 200 Days, This Country Is World's Envy
Delhi Blames Pollution For Covid Spike At High-Level Health Ministry Meet
Delhi Covid Cases Above 5,000 For 3rd Straight Day, Spike In ICU Patients
2 Million Indians Returned From Abroad Under Vande Bharat Mission: Centre
Existing Lockdown Restrictions Extended In Maharashtra Till November 30
Can TB Vaccine Protect Elderly From Covid?
Is The Covid-19 Situation Worsening In Delhi?
What's The Truth Behind India's Falling Covid Numbers?
"Slight Laxity Can Lead To Spike": AIIMS Director As India Sees Drop In Covid Cases