无法使用 Cheerio 从 <div> 节点蜘蛛获取信息
Unable to get information from <div> Node spider with Cheerio
我正在尝试从巴尔的摩市网站(处于监视状态的项目)下载闭路电视位置的 lat/long 个位置,但没有让控制台记录任何内容。
这是网站:
我的代码是:
const request = require('request');
const cheerio = require('cheerio');
let URL = 'https://data.baltimorecity.gov/Public-Safety/CCTV-Locations/hdyb-27ak/data'
let cameras = [];
request(URL, function(err, res, body) {
if(!err && res.statusCode == 200) {
let $ = cheerio.load(body);
$('div.blist-t1-c140113793').each(function() {
let camera = $(this);
let location = camera.text();
console.log(location);
cameras.push(location);
});
console.log(cameras);
}
});
我试过将 blist-t1-c140113793
和 blist-td blist-t1-c140113793
设置为 blist-td blist-t1-c140113793
但都没有用。
那是因为这些 div 的数据是在页面呈现后异步加载的。 JavaScript 不由 Cherrio 或任何其他此类库执行。您需要分析网络流量并了解哪个 HTTP 调用加载了这些数据,或者使用像 Selenium 这样的东西,它实际上在浏览器中执行 JavaScript。
我正在尝试从巴尔的摩市网站(处于监视状态的项目)下载闭路电视位置的 lat/long 个位置,但没有让控制台记录任何内容。
这是网站:
我的代码是:
const request = require('request');
const cheerio = require('cheerio');
let URL = 'https://data.baltimorecity.gov/Public-Safety/CCTV-Locations/hdyb-27ak/data'
let cameras = [];
request(URL, function(err, res, body) {
if(!err && res.statusCode == 200) {
let $ = cheerio.load(body);
$('div.blist-t1-c140113793').each(function() {
let camera = $(this);
let location = camera.text();
console.log(location);
cameras.push(location);
});
console.log(cameras);
}
});
我试过将 blist-t1-c140113793
和 blist-td blist-t1-c140113793
设置为 blist-td blist-t1-c140113793
但都没有用。
那是因为这些 div 的数据是在页面呈现后异步加载的。 JavaScript 不由 Cherrio 或任何其他此类库执行。您需要分析网络流量并了解哪个 HTTP 调用加载了这些数据,或者使用像 Selenium 这样的东西,它实际上在浏览器中执行 JavaScript。