темный логотип proxyscrape

Web Scraping for News Articles using Python– Best Way In 2024

Python, Янв-03-20235 минут чтения
Новости - лучший способ узнать, что происходит в мире. Для инженеров по обработке данных новостные статьи - один из лучших способов собрать нереальные объемы данных. Больше данных - больше понимания, а это единственная возможность усовершенствовать наши технологии и поднять человечество на большую высоту, чем когда-либо прежде. Но новостей очень много, и собрать все данные вручную просто невозможно. Как же лучше всего автоматически получать данные? Ответ - веб-скраппинг новостных статей с помощью python.

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

  1. Поверхностное знакомство с веб-страницами и HTML.
  2. Веб-скраппинг с помощью Python и знаменитой библиотеки BeautifulSoup.

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

Оглавление

Поверхностный уровень Введение в веб-страницы и HTML

Если мы хотим получить важную информацию с какого-либо сайта или веб-страницы, важно знать, как этот сайт работает. Когда мы переходим по определенному URL-адресу с помощью любого веб-браузера (Chrome, Firefox, Mozilla и т. д.), эта веб-страница представляет собой комбинацию трех технологий,

HTML (HyperText Markup Language): HTML определяет содержание веб-страницы. Это стандартный язык разметки для добавления содержимого на сайт. Например, если вы хотите добавить на свой сайт текст, изображения или любые другие материалы, HTML поможет вам в этом.
CSS (каскадные таблицы стилей): Используется для стилизации веб-страниц. CSS управляет всеми визуальными эффектами, которые вы видите на конкретном сайте.
JavaScript: JavaScript - это мозг веб-страницы. JavaScript выполняет всю логическую обработку и функциональность веб-страницы. Таким образом, он позволяет сделать контент и стиль интерактивными.

Эти три языка программирования позволяют нам создавать и управлять аспектами веб-страницы.

Я полагаю, что для этой статьи вы знаете основы веб-страницы и HTML. Некоторые понятия HTML, такие как divs, теги, заголовки и т. д., могут оказаться очень полезными при создании этого веб-скрепера. Вам не нужно знать все, но только основы дизайна веб-страницы и того, как информация содержится на ней, и все готово.

Веб-скраппинг новостных статей с помощью BeautifulSoup в Python

В Python есть несколько пакетов, позволяющих соскребать информацию с веб-страниц. Мы продолжим с BeautifulSoup, потому что это одна из самых известных и простых в использовании библиотек Python для веб-скрапинга.

BeautifulSoup лучше всего подходит для разбора HTML-содержимого URL-адреса и доступа к нему с помощью тегов и меток. Поэтому с его помощью удобно извлекать определенные фрагменты текста с сайта.

С помощью всего 3-5 строк кода мы можем совершить волшебство и извлечь из Интернета любой текст выбранного нами сайта, что говорит о том, что это простой в использовании, но мощный пакет.

Мы начнем с самых основ. Чтобы установить пакет библиотек, введите следующую команду в ваш дистрибутив Python,

! pip install beautifulsoup4

Мы также будем использовать "модуль requests", поскольку он предоставляет BeautifulSoup HTML-код любой страницы. Чтобы установить его, введите следующую команду в ваш дистрибутив Python,

! pip install requests

Этот модуль запросов позволит нам получить HTML-код веб-страницы и перемещаться по ней с помощью пакета BeautfulSoup. Две команды, которые значительно облегчат нашу работу, это

find_all(element tag, attribute): Эта функция принимает в качестве параметров тег и атрибуты и позволяет найти любой HTML-элемент на веб-странице. Она определит все элементы одного типа. Мы можем использовать функцию find(), чтобы получить только первый элемент.

get_text(): После того как мы нашли заданный элемент, эта команда позволяет извлечь внутренний текст.

Чтобы просмотреть HTML-код нашей веб-страницы и найти элементы, которые мы хотим извлечь, мы можем воспользоваться опцией "осмотреть элемент", щелкнув правой кнопкой мыши на странице или просто нажав Ctrl+F. Это позволит вам просмотреть исходный код веб-страницы.

Найдя интересующие нас элементы, мы получим HTML-код с помощью модуля requests, а для извлечения этих элементов воспользуемся BeautifulSoup.

Для этой статьи мы будем работать с английской газетой EL Paris. Мы соскребем заголовки новостных статей с первой страницы, а затем их текст.

Если мы проанализируем HTML-код новостных статей, то увидим, что статья на первой странице имеет такую структуру,

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

импортировать запросы
из bs4 import BeautifulSoup

Получив HTML-контент с помощью модуля requests, мы можем сохранить его в переменной coverpage:

# Запрос
r1 = requests.get(url)
r1.status_code
 
# Мы сохраним в coverpage содержимое титульной страницы
coverpage = r1.content

Далее мы определим переменную soup,

# Создание супа
soup1 = BeautifulSoup(coverpage, 'html5lib')

В следующей строке кода мы найдем искомые элементы,

# Идентификация новостей
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

Используя final_all, мы получаем все вхождения. Поэтому он должен возвращать список, в котором каждый элемент является новостной статьей,

Чтобы извлечь текст, мы используем следующую команду:

coverpage_news[4].get_text()

Если мы хотим получить доступ к значению атрибута (в нашем случае ссылки), мы можем использовать следующую команду,

coverpage_news[4]['href']

Это позволит нам получить ссылку в виде обычного текста.

Если вы разобрались со всеми понятиями до этого момента, то можете заниматься веб-сканированием любого контента по своему усмотрению.

Следующий шаг включает в себя доступ к содержимому каждой новостной статьи с помощью атрибута href, получение исходного кода для поиска абзацев в HTML-коде и, наконец, получение их с помощью BeautifulSoup. Это тот же процесс, что мы описали выше, но нам нужно определить теги и атрибуты, которые идентифицируют содержимое новостной статьи.

Код для полной функциональности приведен ниже. Я не буду объяснять каждую строку отдельно, так как код прокомментирован, и вы сможете понять его, прочитав эти комментарии.

количество_статей = 5
# Пустые списки для содержимого, ссылок и заголовков
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles):
    
   # только новостные статьи (есть также альбомы и другие вещи)
   if "inenglish" not in coverpage_news[n].find('a')['href']:  
       продолжить
    
   # Получение ссылки на статью
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Получение заголовка
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # Чтение содержимого (оно разделено на абзацы)
    article = requests.get(link)
    article_content = article.content
    soup_article = BeautifulSoup(article_content, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # Объединение параграфов
    list_paragraphs = []
   for p in np.arange(0, len(x)):
        paragraph = x[p].get_text()
        list_paragraphs.append(paragraph)
        final_article = " ".join(list_paragraphs)
        
    news_contents.append(final_article)

Давайте поместим извлеченные статьи в следующий список:

  • Набор данных, в который будут вводиться модели (df_features).
  • Набор данных с заголовком и ссылкой (df_show_info).
# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features
df_show_info

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

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

Какой прокси лучше для веб-скрапинга новостных статей с помощью Python?

ProxyScrape является одним из самых популярных и надежных прокси-провайдеров в Интернете. Три прокси-сервиса включают в себя выделенные прокси-серверы в дата-центрах, прокси-серверы для жилых домов и премиум-прокси-серверы. Итак, какой же HTTP-прокси лучше всего подходит для скраппинга новостных статей с помощью python? Прежде чем ответить на этот вопрос, лучше всего ознакомиться с особенностями каждого прокси-сервера.
Выделенный прокси-сервер в центре обработки данных лучше всего подходит для высокоскоростных онлайн-задач, таких как потоковая передача больших объемов данных (по размеру) с различных серверов для анализа. Это одна из основных причин, по которой организации выбирают выделенные прокси для передачи больших объемов данных за короткий промежуток времени.

Выделенный прокси-центр имеет несколько функций, таких как неограниченная пропускная способность и одновременные соединения, выделенные HTTP-прокси для удобного общения и IP-аутентификация для большей безопасности. Благодаря 99,9% времени безотказной работы, вы можете быть уверены, что выделенный центр данных всегда будет работать во время любой сессии. И последнее, но не менее важное: ProxyScrape предоставляет отличную службу поддержки клиентов и поможет вам решить проблему в течение 24-48 рабочих часов. 

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

Еще одна особенность жилого прокси ProxyScrape- это вращающийся прокси. Вращающийся прокси поможет вам избежать перманентного бана вашего аккаунта, потому что ваш резидентный прокси динамически меняет ваш IP-адрес, что затрудняет проверку целевым сервером того, используете вы прокси или нет. 

Помимо этого, другими особенностями жилого прокси являются: неограниченная пропускная способность, наряду с одновременным подключением, выделенные HTTP/s прокси, прокси в любое время сессии из-за 7 миллионов плюс прокси в пуле прокси, имя пользователя и пароль аутентификации для большей безопасности, и последнее, но не менее важное, возможность изменить страну сервера. Вы можете выбрать нужный вам сервер, добавив код страны к имени пользователя при аутентификации. 

Последний - это премиум-прокси. Премиум-прокси - это то же самое, что и прокси для выделенных центров обработки данных. Функциональность остается прежней. Основное отличие - доступность. В премиум-прокси список прокси (список, содержащий прокси) доступен каждому пользователю в сети ProxyScrape. Именно поэтому премиум-прокси стоят дешевле, чем выделенные прокси для дата-центров.
Итак, каково наилучшее возможное решение для лучшего HTTP-прокси для веб-скрапинга новостных статей с помощью python? Ответом будет "квартирный прокси." Причина проста. Как было сказано выше, жилой прокси является вращающимся прокси, что означает, что ваш IP-адрес будет динамически меняться в течение определенного периода времени, что может быть полезно, чтобы обмануть сервер, отправляя много запросов в течение небольшого промежутка времени, не получая IP-блока. 

Далее лучше всего изменить прокси-сервер в зависимости от страны. Для этого достаточно добавить ISO_CODE страны в конце IP-аутентификации или аутентификации по имени пользователя и паролю. 

Рекомендованное чтение:

Вопросы и ответы:

1. Как лучше всего соскребать новостные статьи с помощью python?

Библиотека python называется "BeautifulSoup" и может автоматически соскребать данные из любой новостной статьи. Единственное требование - базовые знания HTML для нахождения HTML-тега в исходном коде страницы, содержащего данные, которые необходимо извлечь.

2. Можно ли скрести новостные статьи с сайта?

Ответ: это зависит от условий сайта. Но большинство новостных статей можно соскребать, поскольку вся информация намеренно выкладывается в открытый доступ. Все публичные данные можно соскребать, если ваш метод соскребания не вредит данным или владельцу сайта.

3. Как соскрести Google News с помощью Python?

С помощью библиотеки python под названием "BeautifulSoup" вы можете скреативить Google News или любые другие новостные статьи с помощью python. Установите библиотеку и надежный прокси-сервер для предотвращения блокировки IP-адреса целевого сервера.

Подведение итогов

В этой статье мы рассмотрели основы веб-скреппинга, поняв основы дизайна и структуры потока веб-страниц. Мы также получили практический опыт извлечения данных из новостных статей. При правильном подходе веб-скреппинг может творить чудеса. Например, на основе извлеченных данных можно создать полностью оптимизированную модель, которая будет предсказывать категории и показывать резюме пользователю. Самое главное - определить свои требования и понять структуру страницы. В Python есть несколько очень мощных и в то же время простых в использовании библиотек для извлечения данных по вашему выбору. Это сделало веб-скреппинг очень простым и увлекательным.  

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

В этой статье мы надеемся подробно рассказать о практическом подходе к веб-скреппингу новостных статей с помощью python. Следует помнить, что прокси-сервер является абсолютной необходимостью для веб-скрепинга. Он помогает предотвратить любые блокировки IP-адресов целевого сервера. ProxyScrape Мы предоставляем отличный и надежный прокси-сервер для вашего веб-скраппинга для новостных статей с использованием python.