CoderCastrov logo
CoderCastrov
Питон

Как собрать данные и создать отчет в Excel

Как собрать данные и создать отчет в Excel
просмотров
3 мин чтение
#Питон

Руководство на Python о том, как собрать данные с веб-сайта и создать отчет в Excel для дальнейшего анализа.

Вы когда-нибудь задумывались о анализе определенного веб-сайта? Например, анализ популярных ключевых слов или услуг. И какой лучший инструмент для анализа, чем Excel? В этой статье я покажу вам, что достичь этого может быть проще, чем вы думаете.

Чтобы запустить пример, загрузите этот Jupyter notebook.

Вот несколько ссылок, которые могут вас заинтересовать:

- [Маркировка и инжиниринг данных для разговорного ИИ и аналитики](https://www.humanfirst.ai/)- [Data Science для бизнес-лидеров](https://imp.i115008.net/c/2402645/880006/11298) [Курс]- [Введение в машинное обучение с использованием PyTorch](https://imp.i115008.net/c/2402645/788201/11298) [Курс]- [Станьте менеджером по продукту роста](https://imp.i115008.net/c/2402645/803127/11298) [Курс]- [Глубокое обучение (серия Adaptive Computation and ML)](https://amzn.to/3ncTG7D) [Электронная книга]- [Бесплатные тесты навыков для Data Scientists и Machine Learning Engineers](https://aigents.co/skills)

Некоторые из приведенных выше ссылок являются партнерскими ссылками, и если вы перейдете по ним и совершите покупку, я получу комиссию. Имейте в виду, что я размещаю ссылки на курсы из-за их качества, а не из-за получения комиссии от ваших покупок.

1. Определение того, что нужно спарсить

В первую очередь, вам нужно определить, что именно вы хотите спарсить. В моем примере это последние статьи с TechCrunch (отмечены красным квадратом на изображении ниже). Для каждой статьи я хочу спарсить заголовок, краткое содержание и URL.

Давайте проанализируем HTML в веб-браузере (щелкните правой кнопкой мыши на веб-странице -> "Исследовать элемент") и найдем шаблон в HTML-элементах, которые форматируют последние статьи (отмечены синим квадратом на изображении ниже).

Исследование HTML в веб-браузере (щелкните правой кнопкой мыши на веб-странице -> 'Исследовать элемент')

Статьи отмечены элементами: <article class="post-block post-block--image post-block--unread">. При более детальном рассмотрении мы получаем элементы с заголовком, содержанием и атрибутом с URL статьи.

2. Парсинг

Теперь, когда я определил элементы, мне нужно их распарсить. Давайте получим веб-страницу TechCrunch и распарсим ее с помощью HTML-парсера BeautifulSoup.

url = "https://techcrunch.com/"
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text, "html.parser")
Parsed HTML of TechCrunch with BeautifulSoup

В распарсенном выводе выше есть элементы <div>, а не <article> - вы можете прочитать больше о том, почему это происходит в ответе на StackOverflow.

Чтобы распарсить статьи из распарсенного HTML, мне нужно определить HTML-элементы:

  • родительский элемент статьи помечен тегом div с атрибутами class="post-block post-block--image post-block--unread"
  • заголовок и URL находятся в отдельном блоке: class="post-block__title__link", class="post-block__content" соответственно.

Ниже приведен код, который распарсивает заголовок статьи, краткое содержание и URL, и добавляет их в списки.

article_titles, article_contents, article_hrefs = [], [], []
for tag in soup.findAll("div", {"class": "post-block post-block--image post-block--unread"}):
    tag_header = tag.find("a", {"class": "post-block__title__link"})
    tag_content = tag.find("div", {"class": "post-block__content"})
    article_title = tag_header.get_text().strip()
    article_href = tag_header["href"]
    article_content = tag_content.get_text().strip()
    article_titles.append(article_title)
    article_contents.append(article_content)
    article_hrefs.append(article_href)

3. Создание отчета в Excel

Я разобрал содержимое веб-страницы, теперь мне нужно сохранить его в файл Excel. С помощью DataFrame из библиотеки pandas мы можем создать отчет в Excel с помощью нескольких команд. Давайте создадим DataFrame из списков.

df = pd.DataFrame({"Заголовок": article_titles, "Содержание": article_contents, "Ссылка": article_hrefs})
DataFrame pandas с разобранными статьями
def auto_adjust_excel_columns(worksheet, df):
    for idx, col in enumerate(df):  _# перебираем все столбцы_        
        series = df[col]
        max_len = (
            max((
                series.astype(str).map(len).max(),  _# длина самого большого элемента
                len(str(series.name)),  _# длина названия столбца/заголовка
            ))
            + 1
        )  _# добавляем немного дополнительного пространства        
        worksheet.set_column(idx, idx, max_len)  _# устанавливаем ширину столбца_

По умолчанию столбцы в Excel не автоматически подстраиваются под содержимое, поэтому нам нужно установить ширину столбцов (максимальное значение между заголовком столбца и самым большим элементом в столбце). Ниже приведен код, который автоматически подстраивает столбцы и создает файл Excel из DataFrame.

writer = pd.ExcelWriter('TechCrunch_latest_news.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Лист1', index=False)
auto_adjust_excel_columns(writer.sheets['Лист1'], df)
writer.save()
Отчет в Excel с последними статьями TechCrunch

Заключение

В этой статье я показал, как парсить последние статьи с TechCrunch и сохранять их в отчете Excel, который может быть использован не программистами. Python и его библиотеки позволяют нам достичь этого с помощью нескольких команд.

Каждый веб-сайт отличается и требует некоторого ручного поиска правильных элементов для парсинга. Дайте мне знать, если вам нужна помощь с парсингом.

Прежде чем вы уйдете

Подпишитесь на меня в Twitter, где я регулярно твиттерю о Data Science и Machine Learning.