Node.js 爬虫 - 批量获取西刺国内高匿代理IP
创建项目
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 查找目标元素位置
代码编写
请求目标页面
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