Javascript cheerio在抓取网页后没有得到回复
我想抓取一个网站的数据,所以我尝试使用Javascript cheerio在抓取网页后没有得到回复,javascript,node.js,web-scraping,cheerio,Javascript,Node.js,Web Scraping,Cheerio,我想抓取一个网站的数据,所以我尝试使用cheerionpm包 选择器在chrome开发工具中工作得非常好 let commodity_array = $( "#tdm_base_scroll > div > div.dt_ta_09 > div.dt_ta_10" ) .text() .split("\n"); console.log(commodity_array); 但在我的代码中使用时,它返
cheerio
npm包选择器在chrome开发工具中工作得非常好
let commodity_array = $(
"#tdm_base_scroll > div > div.dt_ta_09 > div.dt_ta_10"
)
.text()
.split("\n");
console.log(commodity_array);
但在我的代码中使用时,它返回空响应我的代码: 我从中抓取数据的网站url为: 我从
hitesh chaudhary
youtube频道,请求头是否有任何问题,
我不熟悉web抓取,所以我不知道我做错了什么步骤在http头中,您指定了
“接受编码”:“gzip,deflate,br”
,这意味着您希望将请求结果压缩为gzip。Cheerio需要文本,因此无法解析响应数据。
只需删除该标题即可使其正常工作:
const request = require("request-promise"),
cheerio = require("cheerio");
const url = "https://www.commodityonline.com/mandiprices/";
(async () => {
const response = await request({
uri: url,
headers: {
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-language": "en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6",
}
});
let $ = cheerio.load(response);
let commodity_array = $(
"#tdm_base_scroll > div > div.dt_ta_09 > div.dt_ta_10"
)
.text()
.split("\n");
console.log(commodity_array);
})();
请注意,这是不推荐的。一个好的选择是:
好的,我还想使用axios运行I-more查询,`let all_objects=$(“#tdm_base_scroll>div>div.dt_tau 09”);for(让所有对象的对象)console.log(object.textContent.split(“\n”);`它在开发工具中工作得很好,但在我的index.js代码中给出了未定义的结果——我在index.js中写的--`const axios=require(“axios”)、cheerio=require(“cheerio”)、fs=require(“fs”)、json2csv=require(“json2csv”)。解析器;const url=“”;(async()=>{let mandiData=[];const response=wait axios.get(url);let$=cheerio.load(response.data);let all_objects=$(“#tdm_base_scroll>div>div.dt_tau_09”);for(let objects of all_objects){console.log(object.textContent);//const j2cp=new json2csv()//const csv=j2cp.parse(mandiData);)`基本上,我想做的是,我想获取网站上显示的数据并使用它,因此我目前正在将其写入csv文件中…我想我将在for循环中创建一个拆分数据的对象,并将其放入
mandiData
变量中,然后写入csv,如果您可以建议更好的方法,会的great@sachuverma我添加了一个使用cheerio提取数据的示例
const request = require("request-promise"),
cheerio = require("cheerio");
const url = "https://www.commodityonline.com/mandiprices/";
(async () => {
const response = await request({
uri: url,
headers: {
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-language": "en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6",
}
});
let $ = cheerio.load(response);
let commodity_array = $(
"#tdm_base_scroll > div > div.dt_ta_09 > div.dt_ta_10"
)
.text()
.split("\n");
console.log(commodity_array);
})();
const axios = require("axios"),
cheerio = require("cheerio");
const url = "https://www.commodityonline.com/mandiprices/";
(async () => {
const response = await axios.get(url);
let $ = cheerio.load(response.data);
data = []
$("#tdm_base_scroll > div > div.dt_ta_09").each(function (i, elm) {
var price = $("div.dt_ta_14", elm)
data.push({
commodity: $("div.dt_ta_10", elm).text().trim(),
marketCenter: $("div.dt_ta_11", elm).text().trim(),
variety: $("div.dt_ta_12", elm).text().trim(),
arrrivals: $("div.dt_ta_13", elm).text().trim(),
modalPrice: $(price[0]).text().trim(),
minMaxPrice: $(price[1]).text().trim()
})
});
console.log(data);
})();