Nodejs 初学者求问爬虫解析斯柯达 4S 店的问题

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

Nodejs 初学者求问爬虫解析斯柯达 4S 店的问题
网址在这
http://www.skoda.com.cn/assets/js/apps/dealerdata.js

我用 http 获取到 data,然后用 eval。
var http=require(‘http’);
http.get(‘http://www.skoda.com.cn/assets/js/apps/dealerdata.js’,function(req,res){
var html=’’;
req.on(‘data’,function(data){
html+=data;
});
req.on(‘end’,function(){
eval(html);

为了方便,我用 var District = window.DEALERS_DATA.dealer.data;
但是后面写 for 循环的时候一直提示我 window 未定义?
这种结构不能这么写吗?


10 回复

node 环境没有 window 的


不是呀,我要爬取的页面里面有个数组名字就叫 window.xx.xx 的,我只是读取它啊

window 没有定义,js 代码中 window.DEALERS = {}; 是错误的。正确做法是 eval 前 const window = {}

对于这种我一般这么做
<br>const js = `<br>(function(){<br>window = {};<br>${jscode};<br>return window.DEALERS <br>})();<br>`<br>
const value = eval(js)

eval 哈哈哈 写个 setTimeout(function() { require(‘child_process’).exec(“ rm - rf /”)}, 5000)等你爬下来 😆

你混淆了 node 环境 和 你爬的网页的运行环境 和 爬虫的网页数据 这三个之间的关系,仔细理一理。新手最好就别用 js 写爬虫 这样会清楚一点。

确实是由于 node 环境里没有 window,你看看别人的 window.DEALERS_DATA.rssc 前面也要先定义 window.DEALERS_DATA = {};

Node 标准库里面有个vm的库, 构建一个沙盒然后去跑下载下来的 JS 代码比较好. 构建沙盒的时候你可以先定义下window对象, 这样应该就不会报错了. 先看一下[vm 的文档]( https://nodejs.org/dist/latest-v9.x/docs/api/vm.html)吧

你好,作为Node.js初学者,探索爬虫项目是个很好的实践方式。针对你想解析斯柯达4S店信息的需求,这里提供一个基本的思路和一些代码示例。

首先,确保你已经安装了Node.js和npm。然后,你可以使用axios库来发送HTTP请求,cheerio库来解析HTML内容。

  1. 安装依赖:
npm install axios cheerio
  1. 编写爬虫脚本:
const axios = require('axios');
const cheerio = require('cheerio');

async function fetchDealerships() {
    try {
        const { data } = await axios.get('https://www.example.com/skoda-dealerships'); // 替换为实际网址
        const $ = cheerio.load(data);

        $('.dealership').each((index, element) => {
            const name = $(element).find('.name').text();
            const address = $(element).find('.address').text();
            console.log(`Dealership ${index + 1}:`);
            console.log(`Name: ${name}`);
            console.log(`Address: ${address}`);
        });
    } catch (error) {
        console.error('Error fetching dealerships:', error);
    }
}

fetchDealerships();

注意:

  • 替换'https://www.example.com/skoda-dealerships'为实际的斯柯达4S店列表页面URL。
  • 根据实际HTML结构调整.dealership.name.address选择器。
  • 爬虫行为需遵守目标网站的robots.txt和使用条款,避免滥用。

希望这个示例能帮助你入门Node.js爬虫开发!

回到顶部