Class: BookReleasesCliApp::Scraper

Inherits:
Object
  • Object
show all
Defined in:
lib/book_releases_cli_app/scraper.rb

Class Method Summary collapse

Class Method Details

.bam_scrape_details(url) ⇒ Object

– self.bam_scraper –



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/book_releases_cli_app/scraper.rb', line 85

def self.bam_scrape_details(url)
  details = {}

  main_url = url

  html = open(main_url)
  doc = Nokogiri::HTML(html)

  details = {
    :detail_title => doc.css("div#details-description-container div span.details-title-text")[0].text,
    :detail_author => doc.css("div#details-description-container div span.details-author-text").text.gsub("by ", "").gsub("- ", "").gsub("\n",""),
    :release_date => doc.css("div#details-description-container div.price-block-quote-text strong")[0].text.gsub("This item will ship on ", "").split(".")[0],
    :overview => doc.css("span.details-content-text").text.gsub(/\s+/, " ")
  }
end

.bam_scraperObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/book_releases_cli_app/scraper.rb', line 58

def self.bam_scraper
  base_url = "http://www.booksamillion.com"
  comingsoon_page = "/comingsoon?mobile=no&DDTN=Books&DDLN=Coming-Soon&id=7171783864562"
  main_url = "#{base_url}#{comingsoon_page}"

  html = open(main_url)
  doc = Nokogiri::HTML(html)

  doc.css("div#content .product-list .experiments-module-content-display").collect do |product|
    book_url = product.css("a").attr("href").value
    book_details = self.bam_scrape_details(book_url)

    book_info = {
      :url => book_url,
      :title => product.css("a strong")[0].text,
      :author => product.css("span")[0].text,
      :detail_title => book_details[:detail_title],
      :detail_author => book_details[:detail_author],
      :type => product.css("span")[1].text,
      :price => product.css("a strong")[1].text,
      :release_date => book_details[:release_date],
      :overview => book_details[:overview]
    }
    #binding.pry
  end
end

.bn_scrape_details(url) ⇒ Object

– self.bn_scraper –



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/book_releases_cli_app/scraper.rb', line 33

def self.bn_scrape_details(url)
  details = {}

  main_url = url
  html = open(main_url)
  doc = Nokogiri::HTML(html)

  bformat = doc.css("section.formatSelect").text.gsub("\n", "").split(" - ") [0]
  bprice = doc.css("section.formatSelect").text.gsub( / *\n+/, " - " ).split(" - ")[2]
  if bformat == ""
    bformat = doc.css("div#prodPromo h2#pdp-info-format").text.gsub("\n", "")
    bprice = doc.css("div#prodPromo span#pdp-cur-price").text
  end

  details = {
    :detail_title => doc.css("header#prodSummary-header h1").text,
    :detail_author => doc.css("header#prodSummary-header span a").text,
    :detail_type => bformat,
    :detail_price => bprice,
    :release_date => doc.css("div#ProductDetailsTab td")[2].text,
    :overview => doc.css("div#productInfoOverview p").text.gsub(/\s+/, " ")
  }
end

.bn_scraperObject



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/book_releases_cli_app/scraper.rb', line 2

def self.bn_scraper
  newbooks = []

  base_url = "https://www.barnesandnoble.com"
  comingsoon_page = "/b/coming-soon/_/N-1oyfZ8q8"
  main_url = "#{base_url}#{comingsoon_page}"

  html = open(main_url)
  doc = Nokogiri::HTML(html)

  doc.css("div#main-content div.product-shelf-info").collect do |product|
    title_url = product.css(".product-shelf-title a").attr("href").text.split(";")[0]
    session_url = product.css(".product-shelf-title a").attr("href").text.split("?").last

    book_details = self.bn_scrape_details("#{base_url}#{title_url}?#{session_url}")

    book_info = {
      :url => "#{base_url}#{title_url}?#{session_url}",
      :title => product.css(".product-shelf-title a").text,
      :author => product.css(".product-shelf-author").text.gsub("\n\nby ", ""),
      :detail_title => book_details[:detail_title],
      :detail_author => book_details[:detail_author],
      :type => book_details[:detail_type],
      :price => book_details[:detail_price],
      :release_date => book_details[:release_date],
      :overview => book_details[:overview]
    }
    #binding.pry
  end
end