【发布时间】:2020-08-26 01:08:45
【问题描述】:
我正在尝试使用 NodeJS 抓取网站。我正在使用 Axios 发出 HTTP 请求。我只能获取加载网页时可用的那些项目。当我进一步向下滚动时加载的所有 HTML 都不会被获取。
这是我的代码。
const axios = require('axios');
const cheerio = require('cheerio');
var request = require('request');
// table view
const url = "https://www.usnews.com/best-colleges/search?_sort=rank&_sortDirection=asc&study=Engineering&_mode=table";
fetchData(url).then((res) => {
const html = res.data;
const $ = cheerio.load(html);
const unilist = $('.TableTabular__TableContainer-febmbj-0.guaRKP > tbody > tr >td ');
unilist.each(function() {
let title = $(this).find('div').attr("name");
if (typeof(title) == 'string') {
console.log(title);
}
});
})
async function fetchData(url){
console.log("Crawling data...")
// make http call to url
let response = await axios(url).catch((err) => console.log(err));
if(response.status !== 200){
console.log("Error occurred while fetching data");
return;
}
return response;
}
我正在尝试获取所有大学的名称。但是,我只能获得 13 所大学,因为只有在手动向下滚动页面时才会加载其他大学。
如何访问网页中的所有大学:https://www.usnews.com/best-colleges/search?_sort=rank&_sortDirection=asc&study=Engineering&_mode=table
【问题讨论】:
-
好像他们有一个分页 API。因此,您基本上可以更改以下 URL 的查询参数中的页面 - usnews.com/best-colleges/api/…。您基本上可以解析 JSON 响应以获取每个页面的数据。
-
通过使用开发工具观察网站上的网络活动发现了这一点。希望这会有所帮助。
-
@ShobhitChittora 非常感谢您的帮助。请问我怎么知道网站的总页数是多少?
-
如果页面不存在,他们似乎会返回 404。所以你只需要继续阅读页面,直到你得到 404。
标签: javascript node.js http axios httprequest