Очистка данных с помощью beautifulsoup

#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, спасибо за предоставленную ссылку. Это помогло мне, хотя код не был предоставлен. Я объяснил детали и добавил решение в другом комментарии. Надеюсь, это вам поможет.