CoderCastrov logo
CoderCastrov
Парсер

Парсинг New York Times с помощью Python и Beautiful Soup

Парсинг New York Times с помощью Python и Beautiful Soup
просмотров
3 мин чтение
#Парсер

Сегодня мы рассмотрим, как мы можем получать статьи New York Times, используя Python и Beautiful Soup, простым и элегантным способом.

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

Итак, первое, что нам нужно - убедиться, что у вас установлена Python 3. Если нет, вы можете просто установить Python 3 перед продолжением.

Затем вы можете установить beautiful soup с помощью...

pip3 install beautifulsoup4

Нам также понадобятся библиотеки requests, lxml и soup sieve для получения данных, разбора их в XML и использования CSS-селекторов. Установите их с помощью...

pip3 install requests soupsieve lxml

После установки откройте редактор и введите

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests

Теперь давайте перейдем на домашнюю страницу NYT и проанализируем данные, которые мы можем получить.

Вот как это выглядит

Вернемся к нашему коду... давайте попробуем получить эти данные, притворившись браузером, вот так...

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requestsheaders = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'}
url='https://www.nytimes.com/'
response=requests.get(url,headers=headers)
print(response)

Сохраните это как nyt_bs.py.

если вы запустите его...

python3 nyt_bs.py

Вы увидите всю HTML-страницу

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

с классом 'assetWrapper' содержит все отдельные статьи вместе.

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

# -*- coding: utf-8 -*- from bs4 import BeautifulSoup import requests headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'} url='https://www.nytimes.com/' response=requests.get(url,headers=headers) soup=BeautifulSoup(response.content,'lxml') #print(soup.select('.Post')[0].get_text()) for item in soup.select('.assetWrapper'): try: print('----------------------------------------') headline = item.find('h2').get_text() print(headline) except Exception as e: #raise e print('')

Этот код выбирает все блоки статей assetWrapper и проходит через них, ищет элемент и печатает его текст.

Так что при запуске вы получаете.

Бинго!! мы получили заголовки статей.

Теперь с тем же процессом мы получаем имена классов всех остальных данных, таких как ссылка на статью и краткое описание статьи.

# -*- coding: utf-8 -*- from bs4 import BeautifulSoup import requests headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'} url='https://www.nytimes.com/' response=requests.get(url,headers=headers) soup=BeautifulSoup(response.content,'lxml') #print(soup.select('.Post')[0].get_text()) for item in soup.select('.assetWrapper'): try: print('----------------------------------------') headline = item.find('h2').get_text() link = item.find('a')['href'] summary = item.find('p').get_text() print(headline) print(link) print(summary) except Exception as e: #raise e print('')

Когда он запускается, он должен печатать все, что нам нужно из каждой статьи, вот так...

Когда он запускается, он должен печатать все, что нам нужно из каждой статьи, вот так.

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

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

Наш ротирующийся прокси-сервер Proxies API предоставляет простой API, который мгновенно решает все проблемы блокировки IP.

  • С миллионами высокоскоростных ротирующихся прокси, расположенных по всему миру,
  • С нашей автоматической ротацией IP
  • С нашей автоматической ротацией User-Agent-String (которая имитирует запросы от разных действительных веб-браузеров и версий веб-браузеров)
  • С нашей автоматической технологией разгадывания CAPTCHA,
  • Сотни наших клиентов успешно решили проблему блокировки IP с помощью простого API.
  • Все это можно получить через простое API, например, в любом языке программирования.
  • curl "http://api.proxiesapi.com/?key=API_KEY&url=https://example.com"

У нас есть работающее предложение 1000 бесплатных API-вызовов. Зарегистрируйтесь и получите свой бесплатный API-ключ здесь.

Блог был изначально опубликован по адресу https://www.proxiesapi.com/blog/scraping-of-new-york-times-with-python-and-beautiful-soup.php