Рубрики
Без рубрики

Поиск популярных подкастов по науке о данных с помощью веб -царапины

Статья будет проходить процесс, который я использовал для создания списка подкастов, которые вы видите ниже. Если вы … Tagged DataScience, Python, Tutorial.

Статья будет проходить процесс, который я использовал для создания списка подкастов, которые вы видите ниже. Если вы здесь только для подкастов, то получите это …

самые популярные подкасты науки о данных

Лекс Фридман подкаст Лекс Фридман 2400 4.9 126
Руководство по машинному обучению Окдевель 626 4.9 30
Данные скептики Кайл Полич 431 4.4 300
Данные истории Энрико Бертини и Мориц Стефанер 405 4.5 162
Подкаст Twiml AI (ранее на этой неделе в области машинного обучения и искусственного интеллекта) Сэм Шаррингтон 300 4.7 300
DataFramed DataCamp 188 4.9 59
Ай подкаст Нвидия 162 4.5 125
SuperDatascience Кирилл Эременко 161 4.6 300
Частично производное Частично производное 141 4.8 101
Машинное обучение Стэнфорд 138 3.9 20
Говорящие машины Тот -сумки Productions 133 4.6 106
ИИ в бизнесе Даниэль Фаггелла 102 4.4 100
Учебные машины 101 Ричард М. Голден, доктор философии, M.S.E.E., B.S.E.E. 87 4.4 82
Рассказы с подкастом данных Коул Нуссбаумер Кна 80 4.9 33
Данные хруст Корпорация данных Crunch 70 4.9 64
Данные а именно Сегодня Алли Торбан 64 5.0 62
Искусственный интеллект Герметичный 61 4.1 31
O’Reilly Data Show подкаст О’Рейли СМИ 59 4.2 60
Машинное обучение – разработка программного обеспечения ежедневно Машинное обучение – разработка программного обеспечения ежедневно 59 4.5 115
Наука данных дома Франческо Гадалета 58 4.2 100
Подкаст по инженерному инженеру Тобиас Мейси 58 4.7 150
Большое количество данных Райан Эстрада 58 4.6 13
Следуйте подкасту данных Bloomberg Philanthropies 57 4.3 82
Сделать данные простыми IBM 56 4.3 104
Аналитика в огне Мико Юк 51 4.4 48
Научитесь кодировать через месяц Научитесь кодировать 50 4.9 26
Стать подкастом ученых данных Рене Тейт 49 4.5 21
Практический ИИ: машинное обучение и наука о данных Чанженол СМИ 48 4.5 105
НАСТОЯЩИЕ БЕЗОПАСНОСТЬ Показывает: визуализация данных, рассказывание историй и презентация для цифровых маркетологов Леа Пика 44 4.9 58
Глава данных Миссия 43 4.9 16
AI Today Podcast: понимание искусственного интеллекта, эксперты и мнение Cognilytica 42 4.2 161
Данные, управляемые Данные, управляемые 41 4.9 257
Подкаст Human – искусственный интеллект, наука о данных и образование разработчиков Дэвид Якобович 39 4.8 78
Гуру данных Сима Васа 39 5.0 106
Мастера данных подкаста Логика Sumo, размещенная Беном Ньютоном 38 5.0 74
Подкаст PolicyViz Подкаст PolicyViz 36 4.7 180
Радикальный подкаст ИИ Радикальный ИИ 34 4.9 35
Женщины в науке о данных Профессор Марго Герритсен 28 4.9 24
К науке о данных Команда TDS 26 4.6 50
Данные в глубине Горная точка 22 5.0 24
Подкаст Science Science Антонио Борхес и Джорди Эстевес 22 4.4 88
Художники науки о данных Harpreet Sahota 19 4.9 41
# DataFemme Данные Дикайо 17 5.0 30
Банановый подкаст DataIku 15 4.9 33
Испытывает данные с Брайаном Т. О’Нилом Брайан Т. О’Нил из проектирования для аналитики 14 4.9 13
Секреты лидеров анализа данных Экерсон Группа 13 4.8 82
Данные путешествия AJ Гольдштейн 13 5.0 26
Данные дискуссии Outlier.ai 12 5.0 8
Футурология данных – лидерство и стратегия в области искусственного интеллекта, машинного обучения, Наука данных Фелипе Флорес 11 4.4 135
Искусственно умно Кристиан Хаббс и Стивен Доннелли 11 4.9 100

Почему я хочу найти подкасты по науке о данных

Обычно это будет на вершине статьи о поиске подкастов «Наука данных». Ну, это будет на вершине любой статьи. Но реально, что большинство людей находят это из Google, и они просто ищут ответ, который находится в верхней части страницы. Если вы вводите «самые популярные подкасты по науке о данных», вы действительно не хотите бесконечно прокручивать вниз, чтобы найти ответ, который вы ищете. Итак, чтобы сделать их Опыт лучше, мы просто оставляем ответ там. И давая им нахмул. Много нах.

В любом случае, мне очень нравится слушать вещи. В то время как информационные бюллетени отлично подходят для продолжения текущих событий, а блоги отлично подходят для изучения конкретных вещей, подкасты занимают особое место в моем сердце, чтобы позволить мне бесцельно изучать что -то новое каждый день. Формат действительно поддается эффективному предоставлению информации, но таким образом, где вы можете многозадачно. Предварительно-ковид, моя утренняя поездка на работу обычно была полна подкастов. В то время как Covid сделал мою поездку на работу несуществующим делом, я все еще стараюсь слушать хотя бы подкаст в день, если смогу управлять им. Я считаю, что 30 минут обучения в день действительно складываются в долгосрочной перспективе, и я чувствую, что подкасты – отличный способ добраться туда.

Теперь, когда мы пережили мой роман с подкастами, вы можете представить мой удивление, когда я начал искать несколько научных наук, на которые можно подписаться, и я не Найдите учебник о том, как использовать Web Scraping, чтобы найти самые популярные подкасты Data Science для прослушивания. Я знаю, сумасшедший. Есть учебное пособие по всему, под солнцем, за исключением – казалось бы, – подкасты. Я имею в виду, что, вероятно, не один на информационных бюллетенях, но мы пока оставим это в покое …

Так Если никто не достаточно сумасшедший, чтобы написать о поиске подкастов по науке о данных с помощью Web Scraping, то …

геймплязинг процесса

К настоящему времени мы почти наверняка избавимся от тех дикарей, которые здесь только для Ответ ( задыхаться, как они могли ), поэтому мы перейдем к небольшому процессу, через который я прошел, чтобы собрать данные. Это не особенно долго, и мне потребовалось час, чтобы собрать его вместе, так что это должно быть хорошей длиной для статьи.

Я использую Python здесь с установкой Anaconda (которая является общей системой управления пакетами/развертыванием для Python). Я буду запускать это в ноутбуке Юпитера, так как это одноразовая задача, которую мне не нужно использовать снова … надеюсь.

С точки зрения того, что я собираюсь сделать, я запускаю несколько поисков ключевых слов Google, которые ограничены ‘ https://podcasts.apple.com/us/podcast/ ‘Домен и соскребайте результаты для первых нескольких страниц. Оттуда я просто соскребую страницу подкаста Apple, чтобы получить общее количество рейтингов и средний рейтинг. Да, данные будут предвзятыми, но это быстрый и грязный способ получить ответ, который я ищу.

Код для поиска лучших подкастов науки о данных – Версия 1

# import default python packages
import urllib
import requests
import time

Приведенные выше пакеты включены в Python, приведенные ниже не всегда включены. Если у вас их не установлено, вам придется загрузить их. Вы можете узнать, как использовать Pip сделать это или Conda Анкет

# import non-standard python packages
# if you dont have these installed, install them with pip or conda
from bs4 import BeautifulSoup
import pandas as pd

Теперь, когда пакеты были импортированы, вы должны определить своего пользовательского агента. Во -первых, потому что это вежливо, если вы что -то царапаете. Во -вторых, Google дает различные результаты для мобильных и настольных поисков. Это на самом деле не мой пользовательский агент, я взял его из другого урока, так как я немного ленив. Я действительно использую Linux …

# define your desktop user-agent
USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"

Хорошо, теперь мы собираемся определить запросы, которые хотим запустить. А затем создайте функцию, которая выплевывает URL, который мы хотим поцарапать в Google. Я ставлю запросы в формат Kwargs, так как я хочу поставить их на функцию. Это означает, что я могу просто пройти список Kwargs и получить результаты, которые возвращает функция.

# Queries
list_kwargs = [
    {"string": 'data podcast'},
    {"string": 'data podcast', "pg": 2},
    {"string": 'data podcast', "pg": 3},
    {"string": 'data science podcast'},
    {"string": 'data engineering podcast'},
    {"string": 'data visualization podcast'},
]

def string_to_podcast_query(string, pg=None):
    query = urllib.parse.quote_plus(f'site:https://podcasts.apple.com/us/podcast/ {string}')
    if pg != None:
        query = query + "&start=" + str(10*(pg-1))
    return f"https://google.com/search?hl=en&lr=en&q={query}", string

# define the headers we will add to all of our requests
headers = {"user-agent" : USER_AGENT}

# set up an empty list to push results to
results = []

# cycle through the list of queries 
for x in list_kwargs:
    # return the query url and the search term that was used to create it (for classification later)
    url, search_term = string_to_podcast_query(**x)

    # make a get request to the url, include the headers with our user-agent
    resp = requests.get(url, headers=headers)

    # only proceed if you get a 200 code that the request was processed correctly
    if resp.status_code == 200:
        # feed the request into beautiful soup
        soup = BeautifulSoup(resp.content, "html.parser")

    # find all divs (a css element that wraps page areas) within google results
    for g in soup.find_all('div', class_='r'):
        # within the results, find all the links 
        anchors = g.find_all('a')
        if anchors:
            # get the link and title, add them to an object, and append that to the results array
            link = anchors[0]['href']
            title = g.find('h3').text
            item = {
                "title": title,
                "link": link,
                "search_term": search_term
            }
            results.append(item)

    # sleep for 2.5s between requests.  we don't want to annoy google and deal with recaptchas
    time.sleep(2.5)

Хорошо, теперь у нас есть результаты Google обратно – приятно. Отсюда давайте поместим это в пандас DataFrame и немного отфильтровывает.

google_results_df = pd.DataFrame(results)

# create a filter for anything that is an episode.  They should contain a ' | '.
# drop any duplicate results as well.
google_results_df['is_episode'] = google_results_df['title'].str.contains(' | ',regex=False)
google_results_df = google_results_df.drop_duplicates(subset='title')

google_results_podasts = google_results_df.copy().loc[google_results_df['is_episode']==False]

ОК, круто, у нас есть список подкастов. Давайте определим наш скребок Apple Podcasts.

def podcast_scrape(link):
    # get the link, use the same headers as had previously been defined.
    resp = requests.get(link, headers=headers)
    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")

    # find the figcaption element on the page
    rtg_soup = soup.find("figcaption", {"class": "we-rating-count star-rating__count"})
    # the text will return an avg rating and a number of reviews, split by a •
    # we'll spit that out, so '4.3 • 57 Ratings' becomes '4.3', '57 Ratings'
    avg_rtg, rtg_ct = rtg_soup.get_text().split(' • ')
    # then we'll take numbers from the rtg_ct variable by splitting it on the space
    rtg_ct = rtg_ct.split(' ')[0]

    # find the title in the document, get the text and strip out whitespace
    title_soup = soup.find('span', {"class":"product-header__title"})
    title = title_soup.get_text().strip()
    # find the author in the document, get the text and strip out whitespace
    author_soup = soup.find('span', {"class":"product-header__identity podcast-header__identity"})
    author = author_soup.get_text().strip()

    # find the episode count div, then the paragraph under that, then just extract the # of episodes
    episode_soup = soup.find('div', {"class":"product-artwork__caption small-hide medium-show"})
    episode_soup_p = episode_soup.find('p')
    episode_ct = episode_soup_p.get_text().strip().split(' ')[0]

    # format the response as a dict, return that response as the result of the function
    response = {
        "title": title,
        "author": author,
        "link": link,
        "avg_rtg": avg_rtg,
        "rtg_ct": rtg_ct,
        "episodes": episode_ct
    }
    return response

Круто, теперь у нас есть скребок подкаста. Вы можете попробовать это с приведенным ниже кодом.

podcast_scrape('https://podcasts.apple.com/us/podcast/follow-the-data-podcast/id1104371750')


{'title': 'Follow the Data Podcast',
'author': 'Bloomberg Philanthropies',
'link': 'https://podcasts.apple.com/us/podcast/follow-the-data-podcast/id1104371750',
'avg_rtg': '4.3',
'rtg_ct': '57'}

Вернуться к коду. Давайте теперь проберите все ссылки на подкасты, которые у нас есть.

# define the result array we'll fill during the loop
podcast_summ = []
for link in google_results_podcasts['link']:
    # use a try/except, since there are a few episodes still in the list that will cause errors if we don't do this.  This way, if there is an error we just wont add anything to the array.
    try:
        # get the response from our scraper and append it to our results
        pod_resp = podcast_scrape(link)
        podcast_summ.append(pod_resp)
    except:
        pass
    # wait for 5 seconds to be nice to apple
    time.sleep(5)

Теперь, чтобы поместить все в дата и сделать немного сортировки и фильтрации.

pod_df = pd.DataFrame(podcast_summ)

# Remove non-english podcasts, sorry guys...
pod_df = pod_df.loc[~pod_df['link'].str.contains('l=')]
pod_df.drop_duplicates(subset='link', inplace=True)

# merge with the original dataframe (in case you want to see which queries were responsible for which podcasts)
merge_df = google_results_podcasts.merge(pod_df,on='link',suffixes=('_g',''))
merge_df.drop_duplicates(subset='title', inplace=True)

# change the average rating and rating count columns from strings to numbers
merge_df['avg_rtg'] = merge_df['avg_rtg'].astype('float64')
merge_df['rtg_ct'] = merge_df['rtg_ct'].astype('int64')

# sort by total ratings and then send them to a csv
merge_df.sort_values('rtg_ct',ascending=False).to_csv('podcasts.csv')

Отсюда я экспортировал файл в CSV и немного обманул, где я объединил заголовок и ссылку, чтобы создать название , но это в основном потому, что я стал немного ленивым …

В любом случае, это был полный процесс в создании вышеуказанного списка подкастов по науке о данных. Теперь у вас есть лучшие подкасты, отсортированные по общим обзорам. Я также рассматривал использование Castbox в качестве источника соскоба (поскольку у них есть приближение подписчиков/загрузок), но я не мог найти хорошего способа поиска в целом популярных подкастов. Или подкасты, которые содержали определенное слово.

Первая версия этой статьи остановилась здесь и показала результаты этого кода

Код для поиска лучших подкастов науки о данных – Версия 2

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

Почему? Что ж, Google показывает разные результаты для поиска настольных компьютеров по сравнению с мобильными поисками, поэтому, если мы стремимся найти лучшие подкасты, мы хотим быть там, где на самом деле происходит большинство поисков. И поскольку вы в основном всегда слушаете подкасты на своем телефоне, вероятно, имеет смысл искать с вашего телефона … Код для этого ниже, основные изменения в

# Mobile Search Version
headers = {"user-agent" : MOBILE_USER_AGENT}

results = []
for x in list_kwargs:
    url, search_term = string_to_podcast_query(**x)
    resp = requests.get(url, headers=headers)
    if resp.status_code == 200:
        soup = BeautifulSoup(resp.content, "html.parser")

    for g in soup.find_all('div', class_='mnr-c'): # updated target class
        anchors = g.find_all('a')
        if anchors:
            link = anchors[0]['href']
            title = anchors[0].find_all('div')[1].get_text().strip() # updated title crawler
            item = {
                "title": title,
                "link": link,
                "search_term": search_term
            }
            results.append(item)

    time.sleep(2.5)

Что еще я переключился? Я немного переключил запросы Google и добавил еще несколько. Я полагаю, что если я на самом деле пытаюсь найти лучшие подкасты, имеет смысл искать их. Таким образом, вы получаете те, которые обычно отображаются в этих типах списков блога.

# Queries
list_kwargs = [
    {"string": 'best data podcast'},
    {"string": 'best data podcast', "pg": 2},
    {"string": 'best data podcast', "pg": 3},
    {"string": 'best data podcast', "pg": 4},
    {"string": 'best data science podcast'},
    {"string": 'best data science podcast', "pg": 2},
    {"string": 'best data science podcast', "pg": 3},
    {"string": 'best artificial intelligence podcast'},
    {"string": 'best machine learning podcast'},
    {"string": 'best data engineering podcast'},
    {"string": 'best data visualization podcast'},
]

И вот и все – все изменения, которые я внесла для второй версии. Результаты обновляются наверху, но они становятся более полными

Код для поиска лучших подкастов науки данных – версия 3

И я идиот. ‘ Исправление «Мои запросы, чтобы найти только подкасты« Лучшие науки о данных », в конечном итоге заставило меня пропустить несколько хороших, которые я нашел ранее. Так что я собираюсь сделать, как и любой хороший ученый, и просто объединить результаты обоих наборов запросов …

# Queries
list_kwargs = [
{"string": 'best data podcast'},
{"string": 'best data podcast', "pg": 2},
{"string": 'best data podcast', "pg": 3},
{"string": 'best data podcast', "pg": 4},
{"string": 'best data science podcast'},
{"string": 'best data science podcast', "pg": 2},
{"string": 'best data science podcast', "pg": 3},
{"string": 'best artificial intelligence podcast'},
{"string": 'best machine learning podcast'},
{"string": 'best data engineering podcast'},
{"string": 'best data visualization podcast'},
]

Закрывающая заметка

Это кросс-стой из моего блог Анкет Моя нынешняя читательница – это солидные 0 просмотров в месяц, поэтому я подумал, что это, возможно, стоит поделиться этим здесь …

Оригинал: “https://dev.to/gms64/finding-popular-data-science-podcasts-via-web-scraping-34kj”