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 и soupsieve для получения данных, разбивки их на 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 и проходит через них, ища элемент и печатая его текст.

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

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

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

mport 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('')

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

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

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

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

  • С миллионами высокоскоростных поворотных прокси, расположенных по всему миру
  • С нашим автоматическим поворотом IP-адресов
  • С нашим автоматическим поворотом строки User-Agent (который имитирует запросы от разных действительных веб-браузеров и версий веб-браузеров)
  • С нашей автоматической технологией решения CAPTCHA

Сотни наших клиентов успешно решили проблему блокировки IP с помощью простого API.

Простое API может получить все, что вам нужно, как показано ниже на любом языке программирования.

curl "http://api.proxiesapi.com/?key=API_KEY&url=https://example.com"

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

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