Skip to content

Instantly share code, notes, and snippets.

@evantravers
Last active October 26, 2016 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evantravers/754c4e1084edf55e2f358e679f2a29d6 to your computer and use it in GitHub Desktop.
Save evantravers/754c4e1084edf55e2f358e679f2a29d6 to your computer and use it in GitHub Desktop.
require 'pry'
require 'open-uri'
require 'nokogiri'
DesiredModels = ["Honda Civic", "Honda Accord", "Toyota Corolla", "Toyota Camry"]
DesiredModels.each do |model|
puts "Now searching for #{model}..."
filename = "#{model.gsub(" ", "_")}.csv"
request = Nokogiri::HTML(open("http://bham.craigslist.org/search/cta?query=#{model.gsub(' ', '+').downcase}&sort=rel&min_auto_year=2006&max_auto_year=2012&max_auto_miles=175000")) do |config|
config.noblanks
end
cars = request.css('.row')
File.open(filename, 'w') do |file|
file.write("Year,Package,Price,Mileage,ppm,Link\n")
cars.take(20).each do |car|
begin
price = car.css('.price').children[0].text
link = "http://bham.craigslist.org#{car.css('a').first['href']}"
# rest
sleep 2
car_page = Nokogiri::HTML(open(link)) do |config|
config.noblanks
end
attributes = car_page.css('.mapAndAttrs span').map {|d| d.text.split(': ')}
title = attributes.first.first
year = title.match(/\d\d\d\d/).to_s
details = attributes.select{|x| x if x.size != 1 }.to_h
mileage = details['odometer']
file.write "#{year},#{title},#{price},#{mileage},,#{link}\n"
rescue
puts "Details not found for #{link}"
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment