我正在尝试从 carjam.co.nz 中提取年份、品牌、型号、颜色和车牌号。我正在抓取的 URL 示例是https://www.carjam.co.nz/car/?plate=JKY242。
如果最近请求了牌照,则响应将是包含车辆详细信息的 HTML 文档。
如果最近没有请求车牌详细信息(大多数车牌都是这种情况),则响应是带有“尝试获取一些车辆数据”的 HTML 文档。我猜这个页面会在从数据库中获取信息时显示,然后重新加载页面以显示车辆详细信息。这似乎是在服务器端呈现的,我看不到任何 AJAX 请求。
每个结果的 URL 都相同。
我如何“等待”正确的信息?
我在request带有 Express 服务器的 Node.js 上使用(我知道已弃用,但这是我最习惯使用的)。
我的(非常减少的)代码:
app.get("/:numberPlate", (req, res) => {
request("https://www.carjam.co.nz/car/?plate=" + req.params.numberPlate, function(error, response, body) {
const $ = cheerio.load(body);
res.status(200).send(JSON.stringify({
year: $("[data-key=year_of_manufacture]").next().html(),
make: toTitleCase($("[data-key=make]").next().html()),
model: toTitleCase($("[data-key=model]").next().html()),
colour: toTitleCase($("[data-key=main_colour]").next().html()),
}));
}
}
Run Code Online (Sandbox Code Playgroud)
我考虑过:
我确信这是一个常见问题,答案很简单,但我没有足够的经验来自己解决这个问题,或者确切地知道谷歌是什么!
测试:新西兰有“ABC123”格式的数字位置——三个字母,三个数字。这些是按字母顺序发布的,目前我们没有超过 NLU999 的内容(不包括自定义号牌、乱序发行的号牌等)。
要重现“试图获取一些车辆数据”,您每次都需要找到一个新的车牌——序列中早于 NLU999 的大多数车牌应该可以工作。
此代码段应生成有效的车牌。
console.log(Math.random().toString(36).replace(/[^a-n]+/g, '').substr(0, …Run Code Online (Sandbox Code Playgroud)