最近想找一个英语音标数据库,但是一直没有找到满意的,于是想到自己做个网络爬虫爬取有道词典的英语音标。

由于自己比较喜欢用javascript写代码,虽听说用python也可以写爬虫,但是我很不习惯哪种没有;{}边界符号的代码,因为难以阅读,不便于调试和维护,所以找到了nw.js这个基于node.js的工具,其实用node.js就可以写爬虫了,但是想更加直观点,将结果反馈输出到图形界面上。

爬虫程序编写过程中遇到的第一大难题就是node的异步问题,传统的javascript程序是同步的,程序代码也是顺序执行的,但是node的代码是基于事件异步执行,所以理解这个费了我大半天时间,到现在也仍然存在许多不理解,好在是程序顺利跑起来了,结果也是正确的。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Hello World!</title><style></style></head><body><h3>node.js 获取网页源码并保存到本地文件</h3><hr>node.js 版本<script>document.write(process.version)</script>.<div id="info"></div><div id="info0"></div><script>var http = require('http');var fs = require('fs');var url ="http://dict.youdao.com/w/eng/";//有道词典音标格式正则表达式var regPB=/<span class="pronounce">英\s*<span class="phonetic">\[.*\]/;var regPA=/<span class="pronounce">美\s*<span class="phonetic">\[.*\]/;//单词列表var wordArray=["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty"];       //结果存入数组var resultArray=[];        var i=0;//封装主程序function fetchPage(urlx){startRequest(urlx); }//http请求程序function startRequest(urlx){  http.get(urlx, function(res){ var htmlData ="";var BP="";var AP="";res.on('data', function(chunk){   htmlData+=chunk;});res.on('end', function(){var BPArray=htmlData.match(regPB);if(!(BPArray==null)){var clearBPArray=BPArray[0].match(/\[.*\]/);BP=clearBPArray[0];}var APArray=htmlData.match(regPA);if(!(APArray==null)){var clearAPArray=APArray[0].match(/\[.*\]/);AP=clearBPArray[0];}var contents=wordArray[i]+" "+BP+" "+AP+"\r\n";resultArray.push(contents);    fs.appendFile('resultslist.txt', contents, function(error) {if (error) {document.querySelector("#info").innerHTML="出现错误"+error;}document.querySelector("#info").innerHTML=i;});//操作一次后索引递增                   i=i+1;    if (i<wordArray.length){//未遍历完则继续回调 此方法避免了异步模式下for循环无法正常有序进行的障碍var urlStr=url+wordArray[i];fetchPage(urlStr);}else{//遍历后将取得的数据写入文件fs.writeFile('results.txt', resultArray.join(""), function(error) {if (error) {document.querySelector("#info").innerHTML="出现错误"+error;}document.querySelector("#info").innerHTML="数据已经导出到results.txt";});}                });             }).on('error', function (err) {console.log(err);});}fetchPage(url+wordArray[0]);  </script></body>
</html>

我的第一个nw.js爬虫相关推荐

  1. 使用nw.js将网址打包生成exe可安装程序支持xp系统

    说明: 查了很多资料,都是将本地代码打包,且都有头无尾,所以将自己的打包经过写一个完整教程. 注:(本文是将网址[例:www.baidu.com]打包成一个可安装的exe文件) 一:安装前准备程序 1 ...

  2. 使用nw.js快速开发一个基于浏览器的小型桌面端(适用于高校学生完成可视化实验小作业)

    首先讲下退坑事项,节约读者时间 虽然入门较为简单,能快速产出在本地的一个桌面端应用,但是 生成的exe会依赖SDK文件夹下的一些dll,所以不能简单的交付这个exe,需要使用额外的软件进行打包,如En ...

  3. nw.js项目用nsis打包成一个exe文件的坑

    nsis把nw.js整个项目编译成一个exe包,可以实现分发给客户时,可以给用户更好的体验,但是隐藏着一个坑.也可以说是nw.js本身存在的坑.由于nw.js是基于node.js和chromium的应 ...

  4. window下使用nw.js开发桌面应用程序环境的搭建

    安装node window下去node官网下载长期支持版本或者最新稳定版都可以. 按装nw用来管理和按装nw.js npm install -g nrm # 用来设置npm镜像地址 npm insta ...

  5. node 没有界面的浏览器_node.js爬虫入门(二)爬取动态页面(puppeteer)

    之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(ajax)的话,直接用之前的方法发送请求就无法获得我们想要的数据.这时就需要通过爬取动态 ...

  6. python中 getnode用法_node.js 爬虫入门总结

    node.js爬虫 前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等.当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript ...

  7. 使用NW.js封装微信公众号菜单编辑器为桌面应用

    开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ...

  8. 用node-webkit(NW.js)创建桌面程序

    以往写windows桌面程序需要用MFC.C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢? 答案就是用node-webkit这 ...

  9. 用 vue2 和 webpack 快速建构 NW.js 项目(1)

    经过实践和学习,发现本篇文章部分内容已经过时,请看我的关于 Vue 和 NW.js 的 最新文章 和相关实践项目 vue-nw-seed . 使用到的技能点 vue2 webpack NW.js No ...

最新文章

  1. iOS - OC NSSize 尺寸
  2. sqlservcer行列互转
  3. python之简单的get和post请求
  4. python mpl_toolkits.mplot3d.axes3d.Axes3D()使用 介绍
  5. 通过printf设置Linux终端输出的颜色和显示方式
  6. c#中已知一个外部窗口的句柄,怎么关闭
  7. fillcolor是什么意思_fill是什么意思
  8. Leetcode:search_insert_position
  9. html中表单的校验的插件,功能强大的jquery.validate表单验证插件
  10. sap commit rollback
  11. 过年了,就别再背电脑回家。
  12. BZOJ 2120: 数颜色
  13. linux中设备配额 磁盘加密
  14. LOJ 6278 数列分块入门2
  15. 【源码】C++坦克大战
  16. 交互设计常识:设计模型分析
  17. jetson nano风扇控制、远程控制和远程桌面
  18. ai人工智能_人工智能已经如何统治世界
  19. extjs给panel添加滚动条_ExtJs Panel 滚动条设置
  20. iOS9不受信任的企业开发人员,无法信任

热门文章

  1. Reddit月浏览量从百万扩容到十亿的陷阱和教训
  2. 20220423draw
  3. 深度学习环境配置7——(30系显卡)windows下的tensorflow-gpu==2.4.0环境配置
  4. 转:将自己的 ubuntu 系统制作为ISO镜像
  5. python使用极限方法求 π (随机数)
  6. 2022年计算机软件水平考试网络规划设计师(高级)练习题及答案
  7. 现代软件工程作业 案例分析
  8. 《隔离十四天》系列 -第八天 -是否去外包腾讯的迷茫
  9. 基于Python 爬虫+简单数据分析 附PPT
  10. 电线也能用来上网了?