-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscraper.js
70 lines (62 loc) · 1.74 KB
/
scraper.js
1
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
const request = require('request')
const cheerio = require('cheerio')
module.exports = {
getCars: () => {
const URL =
'https://stlouis.craigslist.org/search/cto?hasPic=1&postedToday=1&search_distance=15&postal=63109&min_price=500&max_price=4000&min_auto_year=2000&auto_bodytype=10'
request(URL, (err, res, html) => {
let carsObject = []
if (!err && res.statusCode == 200) {
const $ = cheerio.load(html)
let carsPermaLinks = []
$('.result-info').each((i, el) => {
const carPageURL = $(el)
.children('.result-title')
.attr('href')
carsPermaLinks.push(carPageURL)
})
}
}).then(res => {
carsPermaLinks.forEach(singleURL => {
request(singleURL, (err, res, html) => {
if (!err && res.statusCode == 200) {
const $ = cheerio.load(html)
const carTitle = $('#titletextonly').text()
const carLocation = $('.postingtitletext small').text()
const carImageURL = $('.swipe-wrap .first.visible > img').attr('src')
$('#postingbody > div').remove()
const carDescription = $('#postingbody')
.text()
.replace(/\r?\n|\r/g, '')
carsObject.push({
carTitle: carTitle,
carDescription: carDescription,
carLocation: carLocation,
carImageURL: carImageURL,
carPostURL: singleURL
})
}
})
})
})
}
}
async function getNewCars() {
try {
const cars = await request(URL, (err, res, html) => {
if (!err && res.statusCode == 200) {
const $ = cheerio.load(html)
let carsPermaLinks = []
$('.result-info').each((i, el) => {
const carPageURL = $(el)
.children('.result-title')
.attr('href')
carsPermaLinks.push(carPageURL)
})
}
})
return cars
} catch (err) {
console.log(err)
}
}