#html #python-3.x #web #web-scraping #beautifulsoup
#HTML #python-3.x #веб #очистка веб-страниц #beautifulsoup
Вопрос:
Я новичок в очистке данных. Я пытаюсь очистить три детали с веб-сайта — «» a. дата b. количество клиентов c. текущие отключения
Для current outages
я попытался просто-
article = soup.find(class_="menu-content")
keyword_section = soup.find(class_="menu-row")
keywords_raw = keyword_section.find_all(class_="total-outages-value menu-info-numbers")
keyword_list = [word for word in keywords_raw]
но это не дает мне значения div
{которое является числом}.
Я хочу просто извлечь их за прошлую неделю (исторические данные)
Ответ №1:
Я перешел по ссылке, и она не дает прямого доступа, поскольку мы должны нажать на кнопку Home, чтобы получить требуемые данные. Это может быть обработано с помощью selenium, который является немного большим процессом и требует дополнительных настроек.
Однако я получил лучшее и простое решение, используя только запросы и библиотеку BeautifulSoup.
Они предоставили API, в котором они загружают данные с использованием JSON. Итак, мы можем напрямую очистить JSON и получить требуемые данные. Обратитесь к приведенному ниже коду, а также к ссылке на API.
из bs4 импортируйте запросы на импорт BeautifulSoup
url = 'https://outagemap.coned.com/resources/data/external/interval_generation_data/2020_08_14_17_00_30/data.json?_=1597425338718'
request_url = requests.get(url)
json_response = request_url.json()
print('Date:ttt', json_response['summaryFileData']['date_generated'])
print('Number of custormers:t', json_response['summaryFileData']['total_cust_s'])
print('Current Outages:t', json_response['summaryFileData']['total_outages'])
Результат смотрите на скриншоте ниже.
Комментарии:
1. Большое вам спасибо за ответ. Это действительно полезно. Возможно ли выполнить это задним числом? Например, я ищу данные для очистки с прошлой недели и далее.
2. Я не думаю, что это возможно. Данные регулярно обновляются. Пока, я знаю, я не думаю, что мы сможем получить прошлые данные. Хорошо, что это вам помогло. 🙂
Ответ №2:
Было бы очень полезно, если бы вы предоставили ссылку на веб-сайт, которую вы очищаете, и полный код. Однако, исходя из кода, которым вы поделились, я могу сказать, что вы пропустили упоминание атрибута, который вы хотели очистить ie soup.find('attribute', class_ = 'some_class')
Например, если date находится под атрибутом ‘li’, тогда вы должны указать как
soup.find('li', class_ = 'abcd')
Если количество клиентов указано в атрибуте ‘div’, то вы должны указать как
soup.find('div', calss_ = 'efjh')
Если это вам не помогло, я предлагаю вам указать веб-сайт, который вы хотели очистить, а также весь код для использования, чтобы понять и ответить на соответствующие вопросы.
Комментарии:
1. Привет @Sandeep, я обновил сообщение ссылкой на веб-сайт. Хотя у меня еще нет кода для выполнения задачи.
2. @x2212, спасибо за предоставленную ссылку. Это помогло мне, хотя код не был предоставлен. Я объяснил детали и добавил решение в другом комментарии. Надеюсь, это вам поможет.