【发布时间】:2020-03-17 05:33:38
【问题描述】:
我是 JS 的新手。我想问我们如何将 HTML 网站抓取到 JSON 文件中
该网站是一个考试测试网站。所以它有多个"view-question 标签,如图所示。我想将它们全部抓取到一个 JSON 文件中,即data.json。
目前,我正在使用 Puppeter 和 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);
})
我得到的结果在这里:
"\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 "
我不知道为什么节点会像那样显示那些\n...
请帮忙!!!
更新 1
我尝试使用$(this).html(),但它仍然无法正常工作。结果
"\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, phầ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 "
【问题讨论】:
-
我试过了,但结果没有改变:(
-
我觉得这很难相信。如果您的代码已更改,请update your question
标签: javascript json web-scraping