Я использую find_all()
для просмотра множества веб-страниц и извлечения текстов из целевых элементов HTML. Однако, когда целевой class
отсутствует, find_all()
просто пропускает его, никоим образом не указывая на отсутствие, что разрушает мои данные. Например, когда я ожидаю 100 записей, find_all()
вернет 95; но мне нужно, чтобы пропущенные 5 были помечены как что-то вроде 'N / A', а не просто полностью исключены из вывода. Что я должен делать?
Я попробовал следующий код, и он не сработал, возможно потому, что пустые записи никогда не помещались в author_list
, так как целевой адрес div
или class
отсутствовал на некоторых страницах. Как я могу получить явное указание на отсутствие?
author_list = []
author_list = soup.find_all('div', {'class':'field field--name-field-citation-pages field--type-string field--label-hidden field__item'})
for author in author_list:
if author in author_list:
print(author.text)
else:
print('N/A')
Вывод, который я хочу, выглядит примерно так: ['x', 'x', 'x', 'x', 'x', 'x', 'N / A', 'x', 'x', ' N / A ']; но я хочу получить это ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']
Полный код:
import requests as r
from bs4 import BeautifulSoup as soup
import pandas
#make a list of all web pages' urls
webpages=[]
for i in range(15):
root_url = 'https://cross-currents.berkeley.edu/archives?author=&title=&type=All&issue=All®ion=All&page='+ str(i)
webpages.append(root_url)
#start looping through all pages
titles = []
journals = []
authors = []
pages = []
dates = []
issues = []
for item in webpages:
headers = {'User-Agent': 'Mozilla/5.0'}
data = r.get(item, headers=headers)
page_soup = soup(data.text, 'html.parser')
#find targeted info and put them into a list to be exported to a csv file via pandas
title_list = [title.text for title in page_soup.find_all('div', {'class':'field field-name-node-title'})]
titles += [el.replace('\n', '') for el in title_list]
journal_list = [journal.text for journal in page_soup.find_all('em')]
journals += [el.replace('\n', '') for el in journal_list]
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 += [el.replace('\n', '') for el in author_list]
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 += [el.replace('\n', '') for el in pages_list]
date_list = [date.text for date in page_soup.find_all('div', {'class':'field field--name-field-date field--type-datetime field--label-hidden field__item'})]
dates += [el.replace('\n', '') for el in date_list]
issue_list = [issue.text for issue in page_soup.find_all('div', {'class':'field field--name-field-issue-number field--type-integer field--label-hidden field__item'})]
issues += [el.replace('\n', '') for el in issue_list]
dataset = {'Title': titles, 'Author': authors, 'Journal': journals, 'Date': dates, 'Issue': issues, 'Pages': pages}