Рубрики
Без рубрики

Как просматривать сайты с Python и BeautifulSoup

Автор оригинала: FreeCodeCapm Team.

Джастин Е.

В Интернете больше информации, чем любой человек может поглощать в жизни. То, что вам нужно, это не доступ к этой информации, но масштабируемый способ собирать, организовать и анализировать его.

Вам нужен веб-соскреб.

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

Если вы Avid Investor, получают цены каждый день, могут быть болью, особенно когда вам нужна информация, найдена на нескольких веб-страницах. Мы сделаем удаление данных проще, создавая веб-скребок, чтобы автоматически извлекать индекс фондовых индексов из Интернета.

Начиная

Мы собираемся использовать Python в качестве нашего соскоба, вместе с простыми и мощными библиотечными, красивыми.

  • Для пользователей Mac Python предварительно установлен в OS X. Откройте терминал и введите Python --version Отказ Вы должны увидеть вашу версию Python – 2.7.x.
  • Для пользователей Windows, пожалуйста, установите Python через Официальный сайт Отказ

Далее нам нужно получить библиотеку Beautifulsoup, используя Пип , инструмент управления пакетами для Python.

В терминале типа:

easy_install pip
pip install BeautifulSoup4

Примечание : Если вы не выполните вышеуказанную командную строку, попробуйте добавить Sudo перед каждой строкой.

Основы

Прежде чем мы начнем прыгать в код, давайте понять основы HTML и некоторые правила соскабливания.

HTML-теги Если вы уже понимаете HTML-теги, не стесняйтесь пропустить эту часть.


  
  
    
    
    
        

First Scraping

Hello World

Это основной синтаксис HTML веб-страницы. Каждый Обслуживает блок внутри веб-страницы: 1. : Документы HTML должны начинаться с типовой декларации. 2. Документ HTML содержится между и Отказ 3. Мета-скриптовое объявление HTML-документа между и Отказ 4. Видимая часть HTML-документа составляет между и Теги. 5. Заголовки заголовки определены с помощью

через
Теги. 6. Пункты определены с помощью

тег.

Другие полезные теги включают Для гиперссылок, <таблица> Для таблиц, за столовые ряды и Для столбцов стола.

Кроме того, HTML-теги иногда приходят с ID или Класс атрибуты. ID Атрибут Указывает уникальный идентификатор для тега HTML, а значение должно быть уникальным в документе HTML. Класс Атрибут используется для определения равных стилей для тегов HTML с тем же классом. Мы можем использовать эти идентификаторы и классы, чтобы помочь нам найти данные, которые мы хотим.

Для получения дополнительной информации о HTML Теги , ID и Класс Пожалуйста, обратитесь к W3Schools Учебники Отказ

Правила соскоба

  1. Вы должны проверить условия веб-сайта, прежде чем цапнуть. Будьте осторожны, чтобы прочитать заявления о юридическом использовании данных. Обычно данные, которую вы соскабливают, не должны использоваться в коммерческих целях.
  2. Не запрашивайте данные с сайта слишком агрессивно с вашей программой (также известной как Spamming), так как это может сломать веб-сайт. Убедитесь, что ваша программа ведет себя разумным образом (I.e. действует как человек). Один запрос на одну веб-страницу в секунду – это хорошая практика.
  3. Макет веб-сайта может время от времени измениться, поэтому убедитесь, что пересмотрите сайт и переписывайте свой код по мере необходимости

Осмотрите страницу

Давайте возьмем одну страницу из Bloomberg цитата Сайт в качестве примера.

Как кто-то после фондового рынка, мы хотели бы получить имя индекса (S & P 500) и ее цену на этой странице. Сначала щелкните правой кнопкой мыши и откройте инспектор вашего браузера для проверки веб-страницы.

Попробуйте навещать курсор на цену, и вы сможете увидеть синюю коробку, окружающую его. Если вы нажмете на нем, связанный HTML будет выбран в консоли браузера.

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

Отказ

Точно так же, если вы наведите курсор и нажму на имя «S & P 500 index», он внутри

и

Отказ

Теперь мы знаем уникальное расположение наших данных с помощью Класс Теги.

Перейти в код

Теперь, когда мы знаем, где наши данные, мы можем начать кодировать наш веб-скребок. Откройте свой текстовый редактор сейчас!

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

# import libraries
import urllib2
from bs4 import BeautifulSoup

Далее объявляйте переменную для URL страницы.

# specify the url
quote_page = 'http://www.bloomberg.com/quote/SPX:IND'

Затем используйте Python Urllib2, чтобы получить HTML-страницу заявленной URL.

# query the website and return the html to the variable 'page'
page = urllib2.urlopen(quote_page)

Наконец, анализируйте страницу в формате CountySoup, чтобы мы могли использовать BeautifulSoup для работы на нем.

# parse the html using beautiful soup and store in variable `soup`
soup = BeautifulSoup(page, 'html.parser')

Теперь у нас есть переменная, суп , содержащий HTML страницы. Вот где мы можем начать кодировать часть, которая извлекает данные.

Помните уникальные слои наших данных? BeautifulSoup может помочь нам попасть в эти слои и извлечь содержание с Найти () Отказ В этом случае, поскольку класс HTML Имя Уникальна на этой странице, мы можем просто запросить

Отказ

# Take out the 
of name and get its value name_box = soup.find('h1', attrs={'class': 'name'})

После того, как у нас есть тег, мы можем получить данные, получив его текст Отказ

name = name_box.text.strip() # strip() is used to remove starting and trailing
print name

Точно так же мы можем получить цену тоже.

# get the index price
price_box = soup.find('div', attrs={'class':'price'})
price = price_box.text
print price

Когда вы запускаете программу, вы должны увидеть, что он распечатает текущую цену индекса S & P 500.

Экспорт в Excel CSV

Теперь, когда у нас есть данные, пришло время сохранить его. Отдельный формат Excel Comma – это хороший выбор. Он может быть открыт в Excel, чтобы вы могли легко увидеть данные и обработать его легко.

Но сначала мы должны импортировать модуль Python CSV и модуль DateTime, чтобы получить дату записи. Вставьте эти строки в свой код в раздел «Импорт».

import csv
from datetime import datetime

В нижней части вашего кода добавьте код для записи данных в файл CSV.

# open a csv file with append, so old data will not be erased
with open('index.csv', 'a') as csv_file:
 writer = csv.writer(csv_file)
 writer.writerow([name, price, datetime.now()])

Теперь, если вы запустите свою программу, вы должны экспортировать index.csv Файл, который вы можете открыть с Excel, где вы должны увидеть строку данных.

Поэтому, если вы запускаете эту программу каждый день, вы сможете легко получить цену индекса S & P 500, не вырываясь через сайт!

Сдвиньте дальше (расширенное использование)

Несколько индексов Так что соскоб один индекс недостаточно для вас, верно? Мы можем попытаться извлечь несколько индексов одновременно.

Сначала измените quote_page в массив URL.

quote_page = ['http://www.bloomberg.com/quote/SPX:IND', 'http://www.bloomberg.com/quote/CCMP:IND']

Затем мы изменяем код экстракции данных в для LOOP, который будет обрабатывать URL-адреса один за другим и хранить все данные в переменной данные в корза.

# for loop
data = []
for pg in quote_page:
 # query the website and return the html to the variable 'page'
 page = urllib2.urlopen(pg)
 
# parse the html using beautiful soap and store in variable `soup`
 soup = BeautifulSoup(page, 'html.parser')
 
# Take out the 
of name and get its value name_box = soup.find('h1', attrs={'class': 'name'}) name = name_box.text.strip() # strip() is used to remove starting and trailing # get the index price price_box = soup.find('div', attrs={'class':'price'}) price = price_box.text # save the data in tuple data.append((name, price))

Кроме того, измените раздел сохранения, чтобы сохранить строку данных по строке.

# open a csv file with append, so old data will not be erased
with open('index.csv', 'a') as csv_file:
 writer = csv.writer(csv_file)
 # The for loop
 for name, price in data:
 writer.writerow([name, price, datetime.now()])

Rerun Программа, и вы должны быть в состоянии извлечь два индекса одновременно!

Расширенные методы соскрезывания

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

  1. Снапировка мощный Python Scraping Framework
  2. Попробуйте интегрировать свой код с помощью публичных API. Эффективность поиска данных намного выше, чем соскобные веб-страницы. Например, посмотрите на Facebook график API , что может помочь вам получить скрытые данные, которые не отображаются на веб-страницах Facebook.
  3. Подумайте, используя бэкэнд базы данных, как MySQL Чтобы сохранить ваши данные, когда он становится слишком большим.

Принять сухой метод

Сухие подставки для «Не повторяйте себя», попробуйте автоматизировать свои повседневные задачи, такие как Этот человек Отказ Некоторые другие забавные проекты для рассмотрения могут отслеживать активное время отслеживания ваших друзей Facebook (с их согласия) или схватываем список тем в форуме и пробовать обработку естественного языка (которая является горячей темой для искусственного интеллекта права сейчас)!

Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь оставить комментарий ниже.

Ссылки http://www.gregreda.com/2013/03/03/web-scraping-101-with-python/ http://www.analyticsvidhya.com/blog/2015/10/beginner-guide-web-scraping-beautiful-soup-python/

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