Копия парсинга New York Times с помощью Python и Beautiful Soup
Table Of Content
Сегодня мы рассмотрим, как мы можем парсить статьи 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