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

Как соскрести данные финансирования Yahoo в Python с помощью Scrapy

Yahoo Finance – это хорошо установленный веб-сайт, содержащий различные области финансовых данных, таких как цены на акции, финансовые новости и отчеты. У этого есть своя Yahoo

Автор оригинала: 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 
Yahoo Finance Scraper Scrapy Install

Как видно на приведенном выше фрагменте терминала, 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 осуществляется через проверку веб-страницы с помощью веб-браузера.

Yahoo Finance Scraper осматривает элементы

После того, как мы нажмеем Проверять Кнопка, панель появляется на правой стороне экрана, содержащей огромное количество HTML. Наша задача – поиск имени тегов и их атрибутов, содержащих данные, которые мы хотим извлечь.

Например, если мы хотим извлечь значения из таблицы, содержащей «предыдущие близки», нам понадобятся имена и атрибуты тегов, хранящих данные.

Yahoo Finance Scraper 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, используя красивый суп.

Спасибо за прочтение. Не стесняйтесь комментировать ниже для запросов или предложений.