200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > node.js实现网络爬虫获取区划代码和城乡划分代码

node.js实现网络爬虫获取区划代码和城乡划分代码

时间:2020-05-01 17:33:26

相关推荐

node.js实现网络爬虫获取区划代码和城乡划分代码

由于公司项目需要,需要开发网络爬虫,爬取区划代码和城乡划分代码

具体是从以下网址获取数据

统计用区划代码和城乡划分代码(截止10月31日)

安装依赖

npm install cheerio //检索所需数据npm install requestnpm install request-promise //远程访问页面npm install iconv-lite //编码转换

2.页面编码问题说明

页面中使用的是gb2312,如果直接远程获取页面源码内容,会出现乱码现象。处理方案如下:

配置 request-promise的options

const rp = require('request-promise');let options = {method: 'GET',uri: url,encoding: null};let body = await rp(options).catch(function (err) {reject(err);});

这样配置此时获取到的body就是二进制流数据

转码操作

使用iconv-lite对body进行处理

const iconv = require("iconv-lite");body=iconv.decode(body, 'gb2312').toString();

使用cheerio解析Body

以首页页面为例,cheerio 用法与jquery类似

使用谷歌浏览器查看元素

let $ = cheerio.load(body);let node = $('html').find(`.provincetr td a`);let json = {};json.province_name = $(node[0]).text();json.url = $(node[0]).attr('href');json.province_id = json.url.substring(0, 2) + "0000000000";

更多用法可以参考cheerio说明

完整代码

const rp = require('request-promise');const cheerio = require('cheerio');const iconv = require("iconv-lite");let getNeedContent = (url) => {return new Promise(async (resove, reject) => {try {let options = {method: 'GET',uri: url,encoding: null};let body = await rp(options).catch(function (err) {reject(err);});body = iconv.decode(body, 'gb2312').toString();let $ = cheerio.load(body);let node = $('html').find(`.provincetr td a`);let list = [];for (let i in node) {if (!isNaN(parseInt(i))) {let json = {};json.province_name = $(node[i]).text();json.url = $(node[i]).attr('href');json.province_id = json.url.substring(0, 2) + "0000000000";list.push(json);}}resove(list)} catch (err) {reject(err)}})}getNeedContent("http://www./tjsj/tjbz/tjyqhdmhcxhfdm//index.html").then(res => {console.log(JSON.stringify(res));}).catch(err => {console.log(err.message)})

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。