Just dipping my toes into the world of JS here. I have a burning question - How exactly can we scrape an HTML website and store it as a JSON file?
https://i.sstatic.net/BJtwO.png
The website in question is an examination test portal. It's loaded with multiple "view-question" tags, much like the one shown in the image provided. My mission? To extract all these questions into a neat little JSON file named "data.json".
My current tools of choice are Puppeter and Cheerio:
const puppeteer = require('puppeteer');
const url = 'http://tracnghiem.itrithuc.vn/tra-cuu-cau-hoi?grade=12&subject=1&level='
const cheerio = require('cheerio');
const jsonfile = require('jsonfile');
const request = require('request')
puppeteer
.launch()
.then(function(browser){
return browser.newPage();
})
.then(function(page){
return page.goto(url).then(function(){
return page.content()
})
})
.then(function(html){
const $ = cheerio;
$('.view-question', html).each(function(){
jsonfile.writeFile('data.json',$(this).text())
})
})
.catch(function(err){
console.warn(err);
})
The resulting data looks something like this:
"\n\n Câu 113915. Phần thực và phần ảo của số phức z=3+i lần lượt là:\n \n A. 3 và 1\n B. 1 và 3\n\n C. 3 và 0\n D. 3 và i\n \n\n \n\n Câu trả lời đúng: Đáp án A\n Hướng dẫn giải: \n \n Nếuz=a+bithì:\n+ Phần thực là a\n+ Phần thực là b\nSuy ra z=3+i có phần thực là 3, phần ảo là 1\n \n \n \n\n "
"
\n\n "
"
"
"
\n\n "
A puzzling fact - why all those pesky \n...
lines popping up?
SOS! Please help !!!
UPDATE 1
Tried switching things up with $(this).html()
, but no luck yet. Here's how it turned out:
"\n\n <p><b>Câu 113915.</b> Phần thực và phên ảo của số phức $z=3+i$ lần lượt là:</p>\n \n <p><b>A.</b> 3 và 1</p>\n <p><b>B.</b> 1 và 3</p>\n\n <p><b>C.</b> 3 và 0</p>\n <p><b>D.</b> 3 và i</p>\n \n\n <div class=\"box-guide\" style=\"display: none;\" id=\"div-113915\">\n\n <p>Câu trả lời đúng: <b>Đáp án A</b></p>\n <p><i>Hướng dẫn giải: </i></p>\n <div class=\"view-guide\" id=\"view-question-guide\">\n <p>$Nếu z=a+bi thì:$\n+ Phǧn thực là a\n+ Phǧn thực là b\nSuy ra $z=3+i$ có phần thực là 3, phx1EA7;n ảo là 1</p>\n \n </div>\n </div>\n\n " <
/div>\n\n " <
/div>\n\n "
"\
n < /div>\n </div > \n\ n " <
/div>\n\n " <
/div>\n\n "