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

Скаивание новостей и статей из публичных API с Python

Независимо от того, есть ли вы данные ученого, программиста или специалиста AI, вы обязательно можете поставить огромное количество новостей A … Теги с Python, API, Datascity, учебником.

Независимо от того, есть ли вы данные ученым, программистом или специалистом AI, вы обязательно можете поставить огромное количество новостных статей к хорошему использованию. Получение этих статей могут быть сложными, хотя, поскольку вам придется пройти довольно несколько обручей, чтобы добраться до фактических данных – поиск правильных источников новостей, исследуя их API, выяснение, как аутентифицировать против них и, наконец, соскребание данных. Это много работы и нет веселья.

Итак, чтобы сэкономить вам некоторое время и начать, вот список API на публичные новости, которые я смог найти, с объяснением, насколько аутентифицируются против них, запрашивать их и главное примеры для того, как получить все необходимые данные от них!

Сначала и лучший источник данных на мой взгляд Новые ваши времена Отказ Чтобы начать использовать его API, вам нужно создать учетную запись в https://developer.nytimes.com/accounts/create и приложение на https://developer.nytimes.com/my-apps/new-app. . При создании приложения вы можете выбрать, какие API для активации – я рекомендую активировать как минимум Самый популярный , Поиск статьи , Лучшие рассказы и Архив API Отказ Когда ваше приложение создано, вам будет представлен ключ, который вы будете использовать для взаимодействия всех выбранных API, так что скопируйте его и давайте начнем на запрос!

Самый простой запрос, мы можем сделать с NY Times API посмотрите на текущие лучшие истории:

import requests
import os
from pprint import pprint

apikey = os.getenv('NYTIMES_APIKEY', '...')

# Top Stories:
# https://developer.nytimes.com/docs/top-stories-product/1/overview
section = "science"
query_url = f"https://api.nytimes.com/svc/topstories/v2/{section}.json?api-key={apikey}"

r = requests.get(query_url)
pprint(r.json())

Снаптеп выше очень прост. Мы бежим Получить Запрос против Топстористические/V2 конечная точка снабжения Раздел Имя и наш ключ API. Раздел в этом случае это наука , но NY Times Обеспечивает много других вариантов здесь, например, Мода, здоровье, спорт или театр. Полный список можно найти здесь Отказ Этот конкретный запрос будет производить ответ, который будет выглядеть что-то подобное:

{ 'last_updated': '2020-08-09T08:07:44-04:00',
 'num_results': 25,
 'results': [{'abstract': 'New Zealand marked 100 days with no new reported '
                          'cases of local coronavirus transmission. France '
                          'will require people to wear masks in crowded '
                          'outdoor areas.',
              'byline': '',
              'created_date': '2020-08-09T08:00:12-04:00',
              'item_type': 'Article',
              'multimedia': [{'caption': '',
                              'copyright': 'The New York Times',
                              'format': 'superJumbo',
                              'height': 1080,
                              'subtype': 'photo',
                              'type': 'image',
                              'url': 'https://static01.nyt.com/images/2020/08/03/us/us-briefing-promo-image-print/us-briefing-promo-image-superJumbo.jpg',
                              'width': 1920},
                             ],
              'published_date': '2020-08-09T08:00:12-04:00',
              'section': 'world',
              'short_url': 'https://nyti.ms/3gH9NXP',
              'title': 'Coronavirus Live Updates: DeWine Stresses Tests' '
                       'Value, Even After His False Positive',
              'uri': 'nyt://article/27dd9f30-ad63-52fe-95ab-1eba3d6a553b',
              'url': 'https://www.nytimes.com/2020/08/09/world/coronavirus-covid-19.html'},
             ]
 }

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

# Article Search:
# https://api.nytimes.com/svc/search/v2/articlesearch.json?q=&api-key=
# Use - https://developer.nytimes.com/docs/articlesearch-product/1/routes/articlesearch.json/get to explore API

query = "politics"
begin_date = "20200701"  # YYYYMMDD
filter_query = "\"body:(\"Trump\") AND glocations:(\"WASHINGTON\")\""  # http://www.lucenetutorial.com/lucene-query-syntax.html
page = "0"  # <0-100>
sort = "relevance"  # newest, oldest
query_url = f"https://api.nytimes.com/svc/search/v2/articlesearch.json?" \
            f"q={query}" \
            f"&api-key={apikey}" \
            f"&begin_date={begin_date}" \
            f"&fq={filter_query}" \
            f"&page={page}" \
            f"&sort={sort}"

r = requests.get(query_url)
pprint(r.json())

Эта конечная точка имеет множество вариантов фильтрации. Единственное обязательное поле – Q (Запрос), который является поиском термина. Помимо того, что вы можете смешивать и сопоставить запрос фильтра, диапазона дата ( begin_date , end_date ), номер страницы, порядок сортировки и поля границ. Запрос фильтра ( fq ) интересен один, как это позволяет использовать Синтаксис запроса Lucene , который можно использовать для создания сложных фильтров с логическими операторами ( и , или ), отрицания или подстановочные знаки. Хороший учебник можно найти здесь Отказ

Пример реагирования для вышеуказанного запроса может понравиться (некоторые поля были удалены для ясности):

{'response': {'docs': [{'_id': 'nyt://article/0bf06be1-6699-527f-acb0-09fdd8abb6f6',
                        'abstract': 'The president sidestepped Congress when it became clear that his nominee for a '
                                    'top Defense Department position would not win Senate approval.',
                        'byline': {'original': 'By Helene Cooper'},
                        'document_type': 'article',
                        'headline': {'main': 'Trump Puts Pentagon in Political Crossfire With Tata Appointment',
                                     'print_headline': 'Bypassing Congress to Appoint Ally, Trump Puts Pentagon in Political Crossfire'},
                        'keywords': [{'major': 'N', 'name': 'subject', 'rank': 1,
                                      'value': 'United States Politics and Government'},
                                     {'major': 'N', 'name': 'subject', 'rank': 2,
                                      'value': 'Appointments and Executive Changes'},
                                     {'major': 'N', 'name': 'subject', 'rank': 3,
                                      'value': 'Presidential Election of 2020'}],
                        'lead_paragraph': 'WASHINGTON — In making an end run around Congress to appoint Anthony J. Tata, a retired brigadier '
                                          'general with a history of Islamophobic and other inflammatory views, to a top Defense Department '
                                          'post, President Trump has once again put the military exactly where it does not want to be: in '
                                          'the middle of a political battle that could hurt bipartisan support for the Pentagon.',
                        'multimedia': [],
                        'news_desk': 'Washington',
                        'pub_date': '2020-08-03T21:19:00+0000',
                        'section_name': 'U.S.',
                        'source': 'The New York Times',
                        'subsection_name': 'Politics',
                        'type_of_material': 'News',
                        'uri': 'nyt://article/0bf06be1-6699-527f-acb0-09fdd8abb6f6',
                        'web_url': 'https://www.nytimes.com/2020/08/03/us/politics/tata-pentagon.html',
                        'word_count': 927}]}}

Последняя конечная точка для NY Times что я покажу вот их Архив API который возвращает список статей для просмотра месяца, возвращающийся до 1851 года! Это может быть очень полезно, если вам нужны объемные данные и на самом деле не нужно искать конкретные условия.

# Archive Search
# https://developer.nytimes.com/docs/archive-product/1/overview

year = "1852"  # <1851 - 2020>
month = "6"  # <1 - 12>
query_url = f"https://api.nytimes.com/svc/archive/v1/{year}/{month}.json?api-key={apikey}"

r = requests.get(query_url)
pprint(r.json())

Запрос выше поиска для всех статей с июня 1852 года и с результата ниже мы видим, что, хотя мы ищем действительно старые статьи, мы все еще получили 1888 хитов. То, что сказал, что большинство из них не хватает большинства полезных данных, таких как ключевые слова, количество слов, автор и т. Д. Таким образом, вы, вероятно, лучше искать немного более свежих статей.

{'response': {
        'meta': {'hits': 1888},
        'docs': [{'_id': 'nyt://article/fada2905-0108-54a9-8729-ae9cda8b9528',
                        'byline': {'organization': None, 'original': None, 'person': []},
                        'document_type': 'article',
                        'headline': {'content_kicker': None, 'kicker': '1',
                                     'main': 'Sentence for Manslaughter.',
                                     'name': None,
                                     'print_headline': 'Sentence for Manslaughter.'},
                        'keywords': [], 'news_desk': 'None',
                        'print_page': '3',
                        'pub_date': '1852-06-29T05:00:00+0000',
                        'section_name': 'Archives',
                        'source': 'The New York Times',
                        'type_of_material': 'Archives',
                        'uri': 'nyt://article/fada2905-0108-54a9-8729-ae9cda8b9528',
                        'web_url': 'https://www.nytimes.com/1852/06/29/archives/sentence-for-manslaughter.html',
                        'word_count': 0},
                ...]}
}

Это были просто некоторые из (на мой взгляд) более полезные API, предоставленные NY Times Отказ Кроме того, в https://developer.nytimes.com/apis Отказ Чтобы исследовать каждый API, я бы также порекомендовал играть с помощью Squery Builder, как Один для поиска статьи , что позволяет вам создавать и выполнить ваш запрос теста прямо на веб-сайте без какого-либо кодирования.

Следует еще один великий источник новостей и статей – Опекун Отказ Так же, как с NY Times Нам сначала нужно подписаться на ключ API. Вы можете сделать это на https://bonobo.capi.gutools.co.uk/register/developer И вы получите свой ключ по электронной почте. С этим с пути мы можем перейти к Документация API и начните запрашивать API.

Давайте начнем просто путем запроса контента разделов Опекун :

# https://open-platform.theguardian.com/documentation/section
query = "science"
query_url = f"https://content.guardianapis.com/sections?" \
            f"api-key={apikey}" \

r = requests.get(query_url)
pprint(r.json())

{'response': {'results': [{'apiUrl': 'https://content.guardianapis.com/science',
                           'editions': [{'apiUrl': 'https://content.guardianapis.com/science',
                                         'code': 'default',
                                         'id': 'science',
                                         'webTitle': 'Science',
                                         'webUrl': 'https://www.theguardian.com/science'}],
                           'id': 'science',
                           'webTitle': 'Science',
                           'webUrl': 'https://www.theguardian.com/science'}],
              'status': 'ok',
              'total': 1,
              'userTier': 'developer'}}

Эти разделы группы группы в темы, которые могут быть полезны, если вы ищете конкретный тип контента, например, Наука или технологии . Если мы опускаем параметр запроса ( q ), мы вместо этого получаем полный список разделов, что составляет около 75 записей.

Переезд на что-то немного интересное – поиск по Теги :

# https://open-platform.theguardian.com/documentation/tag
query = "weather"
section = "news"
page = "1"
query_url = f"http://content.guardianapis.com/tags?" \
            f"api-key={apikey}" \
            f"&q={query}" \
            f"&page={page}"

r = requests.get(query_url)
pprint(r.json())

{'response': {'currentPage': 1,
              'pageSize': 10,
              'pages': 139,
              'results': [
                          {'apiUrl': 'https://content.guardianapis.com/australia-news/australia-weather',
                           'id': 'australia-news/australia-weather',
                           'sectionId': 'australia-news',
                           'sectionName': 'Australia news',
                           'type': 'keyword',
                           'webTitle': 'Australia weather',
                           'webUrl': 'https://www.theguardian.com/australia-news/australia-weather'},
                          {'apiUrl': 'https://content.guardianapis.com/world/extreme-weather',
                           'id': 'world/extreme-weather',
                           'sectionId': 'world',
                           'sectionName': 'World news',
                           'type': 'keyword',
                           'webTitle': 'Extreme weather',
                           'webUrl': 'https://www.theguardian.com/world/extreme-weather'},
                          ],
              'startIndex': 1,
              'status': 'ok',
              'total': 1385,
              'userTier': 'developer'}}

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

Одна вещь, которую вы действительно пришли сюда, это поиск статьи, и для этого мы будем использовать https://open-platform.theguardian.com/documentation/search :

query = "(hurricane OR storm)"
query_fields = "body"
section = "news"  # https://open-platform.theguardian.com/documentation/section
tag = "world/extreme-weather"  # https://open-platform.theguardian.com/documentation/tag
from_date = "2019-01-01"
query_url = f"https://content.guardianapis.com/search?" \
            f"api-key={apikey}" \
            f"&q={query}" \
            f"&query-fields={query_fields}" \
            f"&section={section}" \
            f"&tag={tag}" \
            f"&from-date={from_date}" \
            f"&show-fields=headline,byline,starRating,shortUrl"

r = requests.get(query_url)
pprint(r.json())

Причина, по которой я впервые показал тебя раздел и Тег Поиск заключается в том, что те могут использоваться в поискоре статьи. Выше вы можете увидеть, что мы использовали раздел и Тег Параметры, чтобы сузить наш поиск, значения которых можно найти с использованием ранее показанных запросов. Помимо этих параметров, мы также включали очевидное Q Параметр для нашего поискового запроса, но и дата начала использования Из-за свидания а также Показать поля Параметр, который позволяет нам запросить дополнительные поля, связанные с контентом – в этом случае они будут заголовками, постановками, рейтингом и сокращенным URL. Есть куча больше тех, кто имеет полный список здесь

И как со всеми предыдущими, вот пример ответа:

{'response': {'currentPage': 1, 'orderBy': 'relevance', 'pageSize': 10, 'pages': 1,
              'results': [{'apiUrl': 'https://content.guardianapis.com/news/2019/dec/19/weatherwatch-storms-hit-france-and-iceland-as-australia-overheats',
                           'fields': {'byline': 'Daniel Gardner (MetDesk)',
                                      'headline': 'Weatherwatch: storms hit France and Iceland as Australia overheats',
                                      'shortUrl': 'https://gu.com/p/dv4dq'},
                           'id': 'news/2019/dec/19/weatherwatch-storms-hit-france-and-iceland-as-australia-overheats',
                           'pillarId': 'pillar/news',
                           'sectionId': 'news',
                           'type': 'article',
                           'webPublicationDate': '2019-12-19T11:33:52Z',
                           'webTitle': 'Weatherwatch: storms hit France and '
                                       'Iceland as Australia overheats',
                           'webUrl': 'https://www.theguardian.com/news/2019/dec/19/weatherwatch-storms-hit-france-and-iceland-as-australia-overheats'},
                          {'apiUrl': 'https://content.guardianapis.com/news/2020/jan/31/weatherwatch-how-repeated-flooding-can-shift-levees',
                           'fields': {'byline': 'David Hambling',
                                      'headline': 'Weatherwatch: how repeated '
                                                  'flooding can shift levees',
                                      'shortUrl': 'https://gu.com/p/d755m'},
                           'id': 'news/2020/jan/31/weatherwatch-how-repeated-flooding-can-shift-levees',
                           'pillarId': 'pillar/news',
                           'sectionId': 'news',
                           'type': 'article',
                           'webPublicationDate': '2020-01-31T21:30:00Z',
                           'webTitle': 'Weatherwatch: how repeated flooding can shift levees',
                           'webUrl': 'https://www.theguardian.com/news/2020/jan/31/weatherwatch-how-repeated-flooding-can-shift-levees'}],
              'startIndex': 1, 'status': 'ok', 'total': 7, 'userTier': 'developer'}}

Для более технического ориентированного источника новостей можно обратиться к Hackernews , который также имеет свой публичный отдых API. Это задокументировано на https://github.com/hackernews/api. . Это API, как вы увидите, находится в версии v0 И в настоящее время очень голые кости, что означает, что он на самом деле не предусматривает определенные конечные точки для – например, – запросы, комментарии или пользователям.

Но даже если это очень простое, он все еще предоставляет всем, что необходимо, например, получить лучшие истории:

query_type = "top"  # top/best/new, also ask/show/job
query_url = f"https://hacker-news.firebaseio.com/v0/{query_type}stories.json?print=pretty"  # Top Stories
r = requests.get(query_url)
ids = r.json()

top = ids[:10]
for story in top:
    query_url = f"https://hacker-news.firebaseio.com/v0/item/{story}.json?print=pretty"
    r = requests.get(query_url)
    pprint(r.json())

Снаптеп выше не так очевиден, как предыдущие, поэтому давайте посмотрим на него более тесно. Сначала мы отправляем запрос на конечную точку API ( v0/topstores ), который не возвращает лучшие истории, как вы ожидаете, но действительно только их идентификаторы. Чтобы получить фактические истории, мы берем эти идентификаторы (первые 10 из них) и отправьте запросы на v0/item/ Конечная точка, которая возвращает данные для каждого из этих отдельных элементов, которые в этом случае оказываются историей.

Вы обязательно заметили, что URL-адрес запроса был параметризован с Query_Type Отказ Вот потому что, Hackernews API также имеет похожие конечные точки для всех верхних разделов сайта, которые являются – спросить, шоу, работа или новое.

Одна приятная вещь в этой API заключается в том, что он не требует аутентификации, поэтому вам не нужно запрашивать ключ API и не нужно беспокоиться о ограничивании скорости, как с другими.

Запуск этого кода будет приземлиться ответ, который выглядит что-то подобное:

{'by': 'rkwz',
 'descendants': 217,
 'id': 24120311,
 'kids': [24122571,
          ...,
          24121481],
 'score': 412,
 'time': 1597154451,
 'title': 'Single Page Applications using Rust',
 'type': 'story',
 'url': 'http://www.sheshbabu.com/posts/rust-wasm-yew-single-page-application/'}
{'by': 'bmgoss',
 'descendants': 5,
 'id': 24123372,
 'kids': [24123579, 24124181, 24123545, 24123929],
 'score': 55,
 'time': 1597168165,
 'title': 'Classic Books for Tech Leads (or those aspiring to be)',
 'type': 'story',
 'url': 'https://sourcelevel.io/blog/3-classic-books-for-tech-leads-or-those-aspiring-to-be'}
{'by': 'adamnemecek',
 'descendants': 7,
 'id': 24123283,
 'kids': [24123803, 24123774, 24124106, 24123609],
 'score': 69,
 'time': 1597167845,
 'title': 'Bevy: Simple, data-driven, wgpu-based game engine in Rust',
 'type': 'story',
 'url': 'https://bevyengine.org'}

Если вы нашли интересные статьи и хотели немного глубже, тогда Hackernews API может помочь с этим. Вы можете найти комментарии каждого представления, пройдя Дети поле указанной истории. Код, который сделал бы, просто выглядит так:

first = 24120311  # Top story
query_url = f"https://hacker-news.firebaseio.com/v0/item/{first}.json?print=pretty"
r = requests.get(query_url)
comment_ids = r.json()["kids"]  # IDs of top level comments of first story

for i in comment_ids[:10]:  # Print first 10 comments of story
    query_url = f"https://hacker-news.firebaseio.com/v0/item/{i}.json?print=pretty"
    r = requests.get(query_url)
    pprint(r.json())

Во-первых, мы смотрим в историю ( элемент ) по ID, как и в предыдущем примере. Затем мы повторяем ее Дети И запустить тот же запрос с соответствующими идентификаторами, полученными предметами, которые в этом случае относятся к комментариям истории. Мы также могли пройти через эти рекурсивно, если бы мы хотели построить все дерево/нить комментариев конкретной истории.

Как всегда, вот обратный ответ:

{'by': 'Naac',
 'id': 24123455,
 'kids': [24123485],
 'parent': 24120311,
 'text': 'So as I understand it Rust is compelling because it is a safer '
         'alternative to C++ ( and sometimes C but mainly a C++ replacement '
         ').

We wouldn't usually create a single page app in C++ right? ' 'So why would we want to do that in Rust ( other than, "just ' 'because" ). Right tool for the right job and all that.', 'time': 1597168558, 'type': 'comment'} {'by': 'intelleak', 'id': 24123860, 'parent': 24120311, 'text': 'I've been hearing good things about zig, and someone mentioned ' 'that zig has better wasm support than rust, is it true? I wish rust ' 'had a js ecosystem too ...', 'time': 1597170320, 'type': 'comment'} {'by': 'praveenperera', 'id': 24120642, 'kids': [24120867, 24120738, 24120940, 24120721], 'parent': 24120311, 'text': 'Great post.

I'd love to see one talking about building a full ' 'stack app using Yew and Actix (or Rocket). And good ways of sharing ' 'types between the frontend and the backend.', 'time': 1597156315, 'type': 'comment'} {'by': 'devxpy', 'id': 24122583, 'kids': [24122721, 24122756, 24122723], 'parent': 24120311, 'text': 'Can anyone please tell me how the author able to use html syntax in ' 'rust?

I get that there are macros, but how are html tags valid ' 'syntax? Is rust just interpreting the html content as ' 'strings?

I've only ever seen C macros, and I don't ' 'remember seeing\n' ' this kind of wizardry happening there.', 'time': 1597165060, 'type': 'comment'}

Поиск популярных и хороших качественных новостей API довольно сложно, поскольку большинство классических газет не имеют бесплатных публичных API. Однако есть источники совокупных новостей, которые можно использовать для получения статей и новостей от газет, как например Financial Times и Bloomberg которые предоставляют только платные услуги API или как CNN Не выставляет никаких API вообще.

Один из этих агрегантов называется Токи API Отказ Он агрегат данные из тысяч источников, 18 языков и более 70 стран, и это также бесплатно.

Это похоже на API, показанные ранее. Мы снова должны сначала получить ключ API. Для этого вам нужно зарегистрироваться на https://currentsapi.services/en/register Отказ После этого перейдите в свой профиль в https://currentsapi.services/en/profile и забрать свой токен API.

С ключом (токеном) готов, мы можем запросить некоторые данные. Там действительно одна интересная конечная точка, и это https://api.currentsapi.services/v1/search. :

# https://currentsapi.services/en/docs/search
apikey = os.getenv('CURRENTS_APIKEY', '...')
category = "business"
language = languages['English']  # Mapping from Language to Code, e.g.: "English": "en"
country = regions["Canada"]  # Mapping from Country to Code, e.g.: "Canada": "CA",
keywords = "bitcoin"
t = "1"  # 1 for news, 2 for article and 3 for discussion content
domain = "financialpost.com"  # website primary domain name (without www or blog prefix)
start_date = "2020-06-01T14:30"  # YYYY-MM-DDTHH:MM:SS+00:00
query_url = f"https://api.currentsapi.services/v1/search?" \
            f"apiKey={apikey}" \
            f"&language={language}" \
            f"&category={category}" \
            f"&country={country}" \
            f"&type={t}" \
            f"&domain={domain}" \
            f"&keywords={keywords}" \
            f"&start_date={start_date}"

r = requests.get(query_url)
pprint(r.json())

Эта конечная точка включает много вариантов фильтрации, включая язык, категорию, страну и многое другое, как показано на фрагменте выше. Все это довольно объяснительные, но для этих первых трех упомянутых, вам понадобится дополнительная информация, поскольку их возможные значения не совсем очевидны. Эти значения происходят от API конечных точек доступны здесь И в случае языков и регионов действительно просто отображения стоимости кода (например, «English»: «en» ) и в случае категорий всего лишь список возможных значений. Это опущено в коде выше, чтобы сделать его немного короче, но я только что скопировал эти сопоставления в Python обдумывать S, чтобы не позвонить API каждый раз.

Ответ на вышеуказанный запрос наносит следующее:

{'news': [{'author': 'Bloomberg News',
           'category': ['business'],
           'description': '(Bloomberg) — Bitcoin is notoriously volatile, prone to sudden price surges and swift reversals '
                          'that can wipe out millions of dollars of value in a matter of minutes. Those changes are often...',
           'id': 'cb50963e-73d6-4a21-bb76-ec8bc8b9c201',
           'image': 'https://financialpostcom.files.wordpress.com/2017/11/fp-512x512.png',
           'language': 'ru',
           'published': '2020-04-25 05:02:50 +0000',
           'title': 'Get Set for Bitcoin 'Halving'! Here's What That Means',
           'url': 'https://business.financialpost.com/pmn/business-pmn/get-set-for-bitcoin-halving-heres-what-that-means'},
          {'author': 'Reuters',
           'category': ['business'],
           'description': 'NEW YORK — Crushing asset sell-offs ranging from bitcoin to precious metals and European stocks '
                          'accompanied Wall Street's slide into bear market territory on Thursday, as investors liqu…',
           'id': '3c75b090-ec7d-423e-9487-85becd92d10c',
           'image': 'https://financialpostcom.files.wordpress.com/2017/11/fp-512x512.png',
           'language': 'en',
           'published': '2020-03-12 23:14:18 +0000',
           'title': 'Wall Street sell-off batters bitcoin, pounds palladium as '
                    'investors go to cash',
           'url': 'https://business.financialpost.com/pmn/business-pmn/wall-street-sell-off-batters-bitcoin-pounds-palladium-as-investors-go-to-cash'}],
 'page': 1,
 'status': 'ok'}

Если вы не ищете конкретные темы или исторические данные, то есть другие варианты, которые Токи API Обеспечивает – Последние новости Конечная точка:

language = languages['English']
query_url = f"https://api.currentsapi.services/v1/latest-news?" \
            f"apiKey={apikey}" \
            f"&language={language}"

r = requests.get(query_url)
pprint(r.json())

Это очень похоже на Поиск Конечная точка, этот, однако, только обеспечивает только язык Параметр и производит такие результаты:

{'news': [{'author': 'Isaac Chotiner',
           'category': ['funny'],
           'description': 'The former U.S. Poet Laureate discusses her decision to tell her mother\'s story in prose, in '
                          'her new book, "Memorial Drive," and her feelings about the destruction of Confederate monuments...',
           'id': '3ded3ed1-ecb8-41db-96d3-dc284f4a61de',
           'image': 'https://media.newyorker.com/photos/5f330eba567fa2363b1a19c3/16:9/w_1280,c_limit/Chotiner-NatashaTrethewey.jpg',
           'language': 'en',
           'published': '2020-08-12 19:15:03 +0000',
           'title': 'How Natasha Trethewey Remembers Her Mother',
           'url': 'https://www.newyorker.com/culture/q-and-a/how-natasha-trethewey-remembers-her-mother'},
          {'author': '@BBCNews',
           'category': ['regional'],
           'description': 'Firefighters are tackling the blaze that broke out in the engineering department at the university...',
           'id': '9e1f1ee2-8041-4864-8cca-0ffaedf9ae2b',
           'image': 'https://ichef.bbci.co.uk/images/ic/1024x576/p08ngy6g.jpg',
           'language': 'en',
           'published': '2020-08-12 18:37:48 +0000',
           'title': "Fire at Swansea University's Bay campus",
           'url': 'https://www.bbc.co.uk/news/uk-wales-53759352'}],
 'page': 1,
 'status': 'ok'}

Там есть много отличных новостных сайтов и онлайн-газеты в Интернете, но в большинстве случаев вы не сможете просматривать свои данные или получить доступ к ним программно. Показанные в этой статье являются редкими с хорошими API и бесплатным доступом, которые вы можете использовать для вашего следующего проекта, будь то какая-то наука о данных, машинном обучении или простой агрегат новостей. Если вы не против платить немного денег на API новостей, вы также можете рассмотреть возможность использования Financial Times или Bloomberg Отказ Помимо API, вы также можете попробовать соскабливать HTML и расстаивать контент с чем-то вроде Beautifulsoup Отказ Если вы произошли, чтобы найти любой другой хороший источник новостей, пожалуйста, дайте мне знать, чтобы я мог добавить его в этот список. 🙂

Оригинал: “https://dev.to/martinheinz/scraping-news-and-articles-from-public-apis-with-python-4dbf”