Если вы уверены, что для примеров длина заголовков всегда правильна, вы можете сделать что-то подобное:
title_list = [title.text for title in page_soup.find_all('div', {'class':'field field-name-node-title'})]
titles_to_add = [el.replace('\n', '') for el in title_list]
titles += titles_to_add
...
author_list = [author.text for author in page_soup.find_all('div', {'class':'field field--name-field-citation-authors field--type-string field--label-hidden field__item'})]
authors_to_add = [el.replace('\n', '') for el in author_list]
if len(authors_to_add) < len(titles_to_add):
while len(authors_to_add) < len(titles_to_add):
authors_to_add += " "
authors += authors_to_add
pages_list = [pages.text for pages in page_soup.find_all('div', {'class':'field field--name-field-citation-pages field--type-string field--label-hidden field__item'})]
pages_to_add = [el.replace('\n', '') for el in pages_list]
if len(pages_to_add) < len(titles_to_add):
while len(pages_to_add) < len(titles_to_add):
pages_to_add += " "
pages += pages_to_add
Однако ... Это просто добавит элементы в столбцы, чтобы они имели правильную длину, чтобы вы могли создать фрейм данных. Но в вашем фрейме данных авторы и страницы не будут в правильном ряду. Вам придется немного изменить свой алгоритм, чтобы достичь конечной цели ... Было бы лучше, если бы вы перебирали все строки на своей странице и получали заголовок и т. Д., Например:
rows = page_soup.find_all('div', {'class':'views-row'})
for row in rows:
title_list = [title.text for title in row.find_all('div', {'class':'field field-name-node-title'})]
...
Затем вам нужно проверить, существует ли заголовок, автор и т. Д. ... 1007 * и, если нет, добавить "None"
или что-то еще в определенный список. Тогда все должно быть правильно в вашем df
.