Автор оригинала: Pankaj Kumar.
Как соскрести данные финансирования Yahoo в Python с помощью Scrapy
Yahoo Finance – это хорошо установленный веб-сайт, содержащий различные области финансовых данных, таких как цены на акции, финансовые новости и отчеты. Он имеет свои собственные API Yahoo Finance для добычи исторических цен на акции и рыночное резюме.
В этой статье мы будем соскабливать оригинальный веб-сайт Finance Yahoo вместо того, чтобы полагаться на API. Веб-соскоб достигается с помощью Web Source Source Source Rull Снапировка Отказ
Объемное потребность в скребке?
Большинство популярных сайтов используют брандмауэр, чтобы заблокировать IPS с чрезмерным движением. В этом случае вы можете использовать Zenscrape , который представляет собой API Scraping Web, который решает проблему соскабливания в масштабе. В дополнение к API Web Scraping, он также предлагает услугу жилого прокси, который дает доступ к саму прокси и предлагает вам максимальную гибкость для вашего использования: https://zenscrape.com/residential-proxies.
Требования к веб-закреплению
Прежде чем мы спустимся к специфике, мы должны соответствовать определенным техническим требованиям:
- Python – Мы будем работать в Python для этого конкретного проекта. Его огромный набор библиотек и простых сценариев делает его лучшим вариантом для веб-соскоба.
- Снапировка – Эта веб-касса, поддерживаемая Python, является одной из самых полезных методик для извлечения данных с веб-сайтов.
- Основы HTML – Скарот включает в себя игра с тегами и атрибутами HTML. Однако, если читатель не знает об основах HTML, Этот сайт может быть полезным.
- Веб-браузер – Обычно используемые веб-браузеры, такие как Google Chrome и Mozilla Firefox, имеют предоставление осмотра основных данных HTML.
Установка и настройка Scrapy
Мы перейдем за быстрый процесс установки для STRAPY. Во-первых, похоже на другие библиотеки Python, Scrapy установлен с использованием PIP.
pip install Scrapy
После завершения установки нам нужно создать проект для нашего веб-скребка. Мы вводим каталог, где мы хотим хранить проект и запустить:
scrapy startproject
Как видно на приведенном выше фрагменте терминала, SCRAPY создает несколько файлов, поддерживающих проект. Мы не будем войти в Nitty-Gritty Details на каждом файле, присутствующем в каталоге. Вместо этого мы будем стремиться принять участие в создании нашего первого скребка с использованием SCRAPY.
В случае, если у читателя есть проблемы, связанные с установкой, поясняется сложный процесс здесь Отказ
Создание нашего первого скребка с помощью Scrapy
Мы создаем файл Python в пауки
Справочник сцепного проекта. Одна вещь, которая должна иметь в виду, что класс Python должен наследовать Scrapy.spider
класс.
import scrapy class yahooSpider(scrapy.Spider): .... ....
Это следует по имени и URL-адресам гусенично, которое мы собираемся создавать.
class yahooSpider(scrapy.Spider): # Name of the crawler name = "yahoo" # The URLs we will scrape one by one start_urls = ["https://in.finance.yahoo.com/quote/MSFT?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/key-statistics?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/holders?p=MSFT"]
На рассмотрении акций – это те из Microsoft (MSFT). Скребок, который мы проектируем, собирается получить важную информацию со следующих трех веб-страниц:
- Сводка запасов акций Microsoft
- Статистика запасов
- Microsoft Financials
start_urls
Список содержит URL для каждой из вышеуказанных веб-страниц.
Разборка соскобного контента
Предоставленные URL-адреса соскрешены один за другим, а HTML-документ отправляется на Разбор ()
функция.
import scrapy import csv class yahooSpider(scrapy.Spider): # Name of the crawler name = "yahoo" # The URLs we will scrape one by one start_urls = ["https://in.finance.yahoo.com/quote/MSFT?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/key-statistics?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/holders?p=MSFT"] # Parsing function def parse(self, response): .... ....
Разбор ()
Функция будет содержать логику за экстракцией данных из веб-страниц Yahoo Finance.
Обнаружение тегов для извлечения соответствующих данных
Открытие тегов из содержимого HTML осуществляется через проверку веб-страницы с помощью веб-браузера.
После того, как мы нажмеем Проверять
Кнопка, панель появляется на правой стороне экрана, содержащей огромное количество HTML. Наша задача – поиск имени тегов и их атрибутов, содержащих данные, которые мы хотим извлечь.
Например, если мы хотим извлечь значения из таблицы, содержащей «предыдущие близки», нам понадобятся имена и атрибуты тегов, хранящих данные.
Как только у нас есть знания позади HTML-тегов, хранящие информацию о наших интересах, мы можем извлечь их с использованием функций, определенных SCRAPY.
Селекторы SCRAPY для добычи данных
Два функции селектора, которые мы будем использовать в этом проекте, являются XPath ()
и CSS ()
Отказ
XPath , независимо, это язык запроса для выбора данных из XML или HTML-документов. XPath означает для языка пути XML.
CSS , независимо, это язык стилики для HTML-языка.
Дополнительная информация о этих функциях селектора может быть получена из их Официальный сайт Отказ
# Parsing function def parse(self, response): # Using xpath to extract all the table rows data = response.xpath('//div[@id="quote-summary"]/div/table/tbody/tr') # If data is not empty if data: # Extracting all the text within HTML tags values = data.css('*::text').getall()
ответ
Значение, полученное в качестве аргумента, содержит все данные на сайте. Как видно в HTML-документе, таблица хранится в пределах Div
Теги, имеющие ID
атрибут как Цитата-сводка
Отказ
Мы бросили вышеуказанную информацию в XPath
Функция и извлечь все TR
Теги в течение указанного Div
тег. Затем мы получаем текст от всех тегов, независимо от их имени (*)
в список под названием Значения
Отказ
Набор значений выглядит следующим образом:
['Previous close', '217.30', 'Open', '215.10', 'Bid', '213.50 x 1000', 'Ask', '213.60 x 800' ... 'Forward dividend & yield', '2.04 (0.88%)', 'Ex-dividend date', '19-Aug-2020', '1y target est', '228.22']
Одна вещь, которая должна быть должным образом отмечена, так это то, что имя и атрибут тегов могут измениться со временем, предоставляя вышеуказанный код без необходимости. Следовательно, читатель должен понимать методологию извлечения такой информации.
Возможно, мы могли бы получить нерелевантную информацию от HTML-документа. Поэтому программист должен реализовать надлежащие чеки, чтобы исправить такие аномалии.
Полный код, приведенный позже в этой статье, содержит еще два примера получения важной информации от моря HTML жаргона.
Написание полученных данных в файл CSV
Окончательная задача этого проекта хранит полученные данные в какое-то постоянное хранение, такое как файл CSV. У Питона есть CSV
Библиотека для облегчения реализации записи в файл .csv.
# Parsing function def parse(self, response): # Using xpath to extract all the table rows data = response.xpath('//div[@id="quote-summary"]/div/table/tbody/tr') # If data is not empty if data: # Extracting all the text within HTML tags values = data.css('*::text').getall() # CSV Filename filename = 'quote.csv' # If data to be written is not empty if len(values) != 0: # Open the CSV File with open(filename, 'a+', newline='') as file: # Writing in the CSV file f = csv.writer(file) for i in range(0, len(values[:24]), 2): f.writerow([values[i], values[i+1]])
Приведенный выше код открывается quote.csv
Файл и записывает значения, полученные с помощью скребка с помощью Python’s CSV
библиотека.
Примечание: CSV
Библиотека не является встроенной библиотекой Python и поэтому требует установки. Пользователи могут установить его за помощью – PIP Установить CSV
Отказ
Запуск всего сценального проекта
После сохранения всего прогресса мы переходим к самого верхний каталог проекта, созданного изначально и запущен:
scrapy crawler
В нашем случае мы бежим Scrapy Clawler Yahoo
И сценарий Python Script Scrapes и хранит всю указанную информацию в файл CSV.
Полный код скребка
import scrapy import csv class yahooSpider(scrapy.Spider): # Name of the crawler name = "yahoo" # The URLs we will scrape one by one start_urls = ["https://in.finance.yahoo.com/quote/MSFT?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/key-statistics?p=MSFT", "https://in.finance.yahoo.com/quote/MSFT/holders?p=MSFT"] # Parsing function def parse(self, response): # Using xpath to extract all the table rows data = response.xpath('//div[@id="quote-summary"]/div/table/tbody/tr') # If data is not empty if data: # Extracting all the text within HTML tags values = data.css('*::text').getall() # CSV Filename filename = 'quote.csv' # If data to be written is not empty if len(values) != 0: # Open the CSV File with open(filename, 'a+', newline='') as file: # Writing in the CSV file f = csv.writer(file) for i in range(0, len(values[:24]), 2): f.writerow([values[i], values[i+1]]) # Using xpath to extract all the table rows data = response.xpath('//section[@data-test="qsp-statistics"]//table/tbody/tr') if data: # Extracting all the table names values = data.css('span::text').getall() # Extracting all the table values values1 = data.css('td::text').getall() # Cleaning the received vales values1 = [value for value in values1 if value != ' ' and (value[0] != '(' or value[-1] != ')')] # Opening and writing in a CSV file filename = 'stats.csv' if len(values) != 0: with open(filename, 'a+', newline='') as file: f = csv.writer(file) for i in range(9): f.writerow([values[i], values1[i]]) # Using xpath to extract all the table rows data = response.xpath('//div[@data-test="holder-summary"]//table') if data: # Extracting all the table names values = data.css('span::text').getall() # Extracting all the table values values1 = data.css('td::text').getall() # Opening and writing in a CSV file filename = 'holders.csv' if len(values) != 0: with open(filename, 'a+', newline='') as file: f = csv.writer(file) for i in range(len(values)): f.writerow([values[i], values1[i]])
Заключение
Структура SCRAPY не может показаться интуитивно понятной по сравнению с другими соскальчающими библиотеками, но углубленное обучение Scrapy доказывает свои преимущества.
Мы надеемся, что эта статья помогла читателю понять Web Scraping с помощью Scrapy. Вы можете проверить нашу другую статью Scraping Web, которая включает в себя экстракцию деталей продукта Amazon, используя красивый суп.
Спасибо за прочтение. Не стесняйтесь комментировать ниже для запросов или предложений.