Попытка очистить этот веб-сайт, чтобы получить имя штата, случаи, случаи смерти, которые нужно передать в CSV-файл, но при запуске программы появляется сообщение об ошибке:
page = requests.get("https://www.cnn.com/interactive/2020/health/coronavirus-us-maps-and-cases/") soup = BeautifulSoup(page.content, 'html.parser') state_table = soup.find(id='root') items = state_table.find(class_='region-table-list') states = [s.get_text() for s in items.find_all(class_='region')] case = [c2.get_text() for c2 in items.find_all(class_='cases numeric')] deaths = [c2.get_text() for c2 in items.find_all(class_ = 'deaths numeric')] details = pd.DataFrame( {'State': states, 'Cases': case, 'Death': deaths, } ) details.to_csv('details.csv') states = [s.get_text() for s in items.find_all(class_='region')] AttributeError: 'NoneType' object has no attribute 'find_all'
Если вы напечатаете soup, вы обнаружите, что искомая информация недоступна. Это связано с тем, что информация выбирается страницей с использованием JavaScript. Который в свою очередь запрашивает другой URL, который предоставляет данные в формате JSON.
soup
import requests import json import pandas as pd page = requests.get("https://ix.cnn.io/data/novel-coronavirus-2019-ncov/us/states.json") js_resp=json.loads(page.text) states=[] case=[] deaths=[] for item in js_resp['data']: states.append(item['name']) case.append(item['cases']) deaths.append(item['deaths']) details = pd.DataFrame( {'State': states, 'Cases': case, 'Death': deaths, } ) details.to_csv('details.csv')
Ошибка означает, что переменная items, которую вы создаете,
items = state_table.find(class_='region-table-list')
возвращает None.
Пожалуйста, попробуйте исправить ее.
С уважением, Diwakar