class StockInquiry::Scraper
Attributes
doc[R]
doc_description[R]
stock[RW]
Public Class Methods
new(ticker)
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 5 def initialize(ticker) @stock = StockInquiry::Stock.new @stock.ticker = ticker @doc = Nokogiri::HTML(open("https://www.reuters.com/finance/stocks/overview/#{ticker}")) @doc_description = Nokogiri::HTML(open("https://www.reuters.com/finance/stocks/company-profile/#{ticker}")) end
Public Instance Methods
scrape_all()
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 12 def scrape_all scrape_name scrape_prices scrape_articles scrape_description @stock.save end
scrape_articles()
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 37 def scrape_articles @doc.search(".moduleBody").each do |section| section.search(".feature").each do |article| news_article = StockInquiry::Article.new news_article.title = article.search("h2").text.strip news_article.url = article.search("h2 a").attr('href').text.strip @stock.add_article(news_article) end end end
scrape_description()
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 48 def scrape_description div = @doc_description.search("#companyNews div.moduleBody") div.search("div.moreLink").remove @stock.description = div.text.strip end
scrape_name()
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 20 def scrape_name @stock.name = @doc.search("#sectionTitle").text.strip end
scrape_prices()
click to toggle source
# File lib/stock_inquiry/scraper.rb, line 24 def scrape_prices @doc.search("#headerQuoteContainer").each do |info| price = info.search("div.sectionQuote.nasdaqChange div.sectionQuoteDetail span")[1].text.strip currency = info.search("div.sectionQuote.nasdaqChange div.sectionQuoteDetail span")[2].text.strip @stock.current_price = "#{price}#{currency}" @stock.previous_close = info.search("div.sectionQuote div.sectionQuoteDetailTop span")[1].text.strip @stock.open_price = info.search("div.sectionQuote")[2].search("div.sectionQuoteDetail").search("span")[1].text.strip high = info.search("div.sectionQuote")[5].search("div.sectionQuoteDetailTop").search("span.sectionQuoteDetailHigh").text.strip low = info.search("div.sectionQuote")[5].search("div.sectionQuoteDetail").search("span.sectionQuoteDetailLow").text.strip @stock.range = "#{low} - #{high}" end end