创建项目

mkdir xicidaili-spider
cd xicidaili-spider
npm init -y
npm install --save request request-promise-native cheerio
touch app.js

cheerio 与 jquery 类似,用于操作和提取 html 中的内容

页面分析

  • 目标页面

https://www.xicidaili.com/nn/1

  • 使用 Google Chrome 查找目标元素位置

QQ截图20181219143435.png

代码编写

  • 请求目标页面

    const request = require('request-promise-native');
    const cheerio = require('cheerio');
    
    // 请求页面
    async function requestPage (url) {
      return await request.get(url);
    }
  • 提取页面中的 IP

    // 提取网页中的代理 IP
    function getIpList (html) {
      const $ = cheerio.load(html);
      const ipNodeList = $('#ip_list tr');
      const ipList = [];
      for (let i = 0; i < ipNodeList.length; i++) {
        // 跳过标题
        if (i === 0) {
          continue;
        }
    
        const tdNodes = ipNodeList.eq(i).find('td');
        const host = tdNodes.eq(1).text();
        const port = tdNodes.eq(2).text();
        ipList.push({
          host,
          port
        });
      }
      return ipList;
    }
  • 调用

    (async () => {
      const page = 1;
      const url = `https://www.xicidaili.com/nn/${page}`;
      try {
        // 请求网页
        const html = await requestPage(url);
    
        // 提取页面的 IP
        const ipList = getIpList(html);
        console.log(ipList);
      } catch (e) {
        console.log(e);
      }
    })();
  • 运行

    node app.js

标签: Node.js