темный логотип 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. Соскабливание комментариев на YouTube - 5 простых шагов
  2. Топ-8 лучших инструментов для веб-скрапинга на Python в 2023 году

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

1. What is the best way to scrape news articles using python?
The python library is called “BeautifulSoup” and can automatically scrape data from any news article. The only requirement would be a basic knowledge of HTML for locating the HTML tag from the page source code that contains the data that needs to be scraped.
2. Is it okay to scrape news articles from the website?
Ответ: это зависит от условий сайта. Но большинство новостных статей можно соскребать, поскольку вся информация намеренно выкладывается в открытый доступ. Все публичные данные можно соскребать, если ваш метод соскребания не вредит данным или владельцу сайта.
3. How do I scrape Google News using Python?
С помощью библиотеки python под названием "BeautifulSoup" вы можете скреативить Google News или любые другие новостные статьи с помощью python. Установите библиотеку и надежный прокси-сервер для предотвращения блокировки IP-адреса целевого сервера.

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

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

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

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