Как использовать if/else в понимании списка с красивой логикой супа, которая будет проходить через html-страницуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать if/else в понимании списка с красивой логикой супа, которая будет проходить через html-страницу

Сообщение Anonymous »

Я пытаюсь изучить упражнение на YouTube, которое будет очищать определенный блок HTML со страницы вики https://en.wikipedia.org/wiki/Toy_Story_3, меня интересуют данные пары ключ-значение внутри информационного окна с этой страницы и поместил его в объект dict Python в моем блокноте Jupyter для обучения панде. часть html представляет собой таблицу с именем класса «infobox vevent». в основном я просматриваю тег "" и части "" и "", чтобы получить данные. вот код с YouTube, но я пытаюсь поступить другим способом, если это возможно, с пониманием списка.

Код: Выделить всё

   r = requests.get("https://en.wikipedia.org/wiki/Toy_Story_3")
soup = bs(r.content)
contents =soup.prettify()

info_box = soup.find(class_="infobox vevent")
info_rows = info_box.find_all("tr")

movie_info = {}
for index, row in enumerate(info_rows):
if index == 0:
movie_info['title'] = row.find("th").get_text()
elif index == 1:
continue
else:
content_key = row.find("th").get_text()
content_value =[row_data.get_text() for row_data in row.find("td").find_all("li")]
movie_info[content_key] = content_value

movie_info`
выход такой

Код: Выделить всё

`{'title': 'Toy Story 3',
'Directed by': [],
'Screenplay by': [],
'Story by': ['John Lasseter', 'Andrew Stanton', 'Lee Unkrich'],
'Produced by': [],
'Starring': ['Tom Hanks',
'Tim Allen',
'Joan Cusack',
'Don Rickles',
'Wallace Shawn',
'John Ratzenberger',
'Estelle Harris',
'Ned Beatty',
'Michael Keaton',
'Jodi Benson',
'John Morris'],
'Cinematography': ['Jeremy Lasky', 'Kim White'],...}

вот часть HTML, которую я очищаю,

Код: Выделить всё


Toy Story 3
Screenplay byMichael Arndt
Story by
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}

[list]
[*]John Lasseter
[*]Andrew Stanton
[*]Lee Unkrich
[/list]

 Produced byDarla K. Anderson
Starring

[list][*][url=/wiki/Tom_Hanks]Tom Hanks[/url]
[*][url=/wiki/Tim_Allen]Tim Allen[/url]
[*][url=/wiki/Joan_Cusack]Joan Cusack[/url]
[*][url=/wiki/Don_Rickles]Don Rickles[/url]
[*][url=/wiki/Wallace_Shawn]Wallace Shawn[/url]
[*][url=/wiki/John_Ratzenberger]John Ratzenberger[/url]
[*][url=/wiki/Estelle_Harris]Estelle Harris[/url]
[*][url=/wiki/Ned_Beatty]Ned Beatty[/url]
[*][url=/wiki/Michael_Keaton]Michael Keaton[/url]
[*][url=/wiki/Jodi_Benson]Jodi Benson[/url]
[*][url=/wiki/John_Morris_(American_actor)]John Morris[/url][/list]
.... more html code here



Как видите, есть пустое значение. только те, у кого есть дочерний элемент , смогли вернуть данные, логическая ошибка находится в этой строке кода content_value =[row_data.get_text() для row_data в row.find("td").find_all("li ")] , он игнорирует без дочернего элемента . нужна помощь, как добавить логику else в эту строку сжатия списка. я попробовал content_value =[row_data.get_text() для row_data в row.find("td").find_all("li") else row_data.ge_text()]. я получаю синтаксическую ошибку.

Подробнее здесь: https://stackoverflow.com/questions/790 ... t-will-tra
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»