位置: 编程技术 - 正文

Node.js编写爬虫的基本思路及抓取百度图片的实例分享(nodejs爬取数据)

编辑:rootadmin

推荐整理分享Node.js编写爬虫的基本思路及抓取百度图片的实例分享(nodejs爬取数据),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node网络爬虫,node爬虫框架puppeteer,node网络爬虫,nodejs爬虫框架crawler,node js爬虫,nodejs做爬虫,node.js爬虫教程,node js爬虫,内容如对您有帮助,希望把文章链接给更多的朋友!

其实写爬虫的思路十分简单:

按照一定的规律发送 HTTP 请求获得页面 HTML 源码(必要时需要加上一定的 HTTP 头信息,比如 cookie 或 referer 之类) 利用正则匹配或第三方模块解析 HTML 代码,提取有效数据 将数据持久化到数据库中

但是真正写起这个爬虫来,我还是遇到了很多的问题(和自己的基础不扎实也有很大的关系,node.js 并没有怎么认真的学过)。主要还是 node.js 的异步和回调知识没有完全掌握,导致在写代码的过程中走了很多弯路。

模块化

模块化对于 node.js 程序是至关重要的,不能像原来写 PHP 那样所有的代码都扔到一个文件里(当然这只是我个人的恶习),所以一开始就要分析这个爬虫需要实现的功能,并大致的划分了三个模块。

主程序,调用爬虫模块和持久化模块实现完整的爬虫功能爬虫模块,根据传来的数据发送请求,解析 HTML 并提取有用数据,返回一个对象持久化模块,接受一个对象,将其中的内容储存到数据库中模块化也带来了困扰了我一个下午的问题:模块之间的异步调用导致数据错误。其实我至今都不太明白问题到底出在哪儿,鉴于脚本语言不那么方便的调试功能,暂时还没有深入研究。

另外一点需要注意的是,模块化时尽量慎用全局对象来储存数据,因为可能你这个模块的一个功能还没有结束,这个全局变量已经被修改了。

Control Flow

这个东西很难翻译,直译叫控制流(吗)。众所周知,node.js 的核心思想就是异步,但是异步多了就会产生好几层嵌套,代码实在难看。这个时候,你需要借助一些 Control Flow 模块来重新整理你的逻辑。在这里就要推荐开发社区十分活跃,用起来也很顺手的 async.js( 提供了很多实用的方法,我在写爬虫时主要用到了

async.eachSeries(arr, fn, callback) 依次把 arr 中的每一个元素传给 fn,若 fn 回调没有返回错误对象就继续传下一个,否则把错误对象传给 callback,循环结束 async.parallel(fn[, fn] , callback) 当所有的 fn 都执行完成后执行 callback

这些控制流方法给爬虫的开发工作带来了很大的方便。考虑这么一个应用场景,你需要把若干条数据插入数据库(属于同一个学生),你需要在所有数据都插入完成后才能返回结果,那么如何保证所有的插入操作都结束了呢?只能是层层回调保证,如果用 async.parallel 就方便多了。

Node.js编写爬虫的基本思路及抓取百度图片的实例分享(nodejs爬取数据)

这里再多提一句,本来保证所有的插入都完成这个操作可以在 SQL 层实现,即 transaction,但是 node-mysql 截止我使用的时候还是没有很好的支持 transaction,所以只有自己手动用代码保证了。

解析 HTML

在解析过程中也遇到一些问题,这里一并记录下来。

最基本的发送 HTTP 请求获得 HTML 代码,使用 node 自带的 http.request 功能即可。如果是爬简单的内容,比如获得某个指定 id 元素中的内容(常见于抓去商品价格),那么正则足以完成任务。但是对于复杂的页面,尤其是数据项较多的页面,使用 DOM 会更加方便高效。

而 node.js 最好的 DOM 实现非 cheerio( 莫属了。其实 cheerio 应该算是 jQuery 的一个针对 DOM 操作优化和精简的子集,包含了 DOM 操作的大部分内容,去除了其它不必要的内容。使用 cheerio 你就可以像用普通 jQuery 选择器那样选择你需要的内容。

下载图片在爬数据时,我们可能还需要下载图片。其实下载图片的方式和普通的网页没有太大的区别,但是有一点让我吃了苦头。

注意下面代码中言辞激烈的注释,那就是我年轻时犯下的错误……

GBK 转码另外一个值得说明的问题就是 node.js 爬虫在爬 GBK 编码内容时转码的问题,其实这个问题很好解决,但是新手可能会绕弯路。这里就把源码全部奉上:

这里我使用的转码库是 iconv-lite( GBK 和 GB 等双字节编码。

实例:爬虫批量下载百度图片

node模块机制与异步处理详解 1.模块机制commonJS模块机制出现的目的是为了构建js在web服务器,桌面程序,浏览器等方面形成生态系统。而nodejs就是这种规范的一种实现,用requird来引

基于socket.io+express实现多房间聊天 socket.io简介Socket.IO是一个开源的WebSocket库,它通过Node.js实现WebSocket服务端,同时也提供客户端JS库。Socket.IO支持以事件为基础的实时双向通讯,它可以

node.js使用cluster实现多进程 首先郑重声明:nodeJS是一门单线程!异步!非阻塞语言!nodeJS是一门单线程!异步!非阻塞语言!nodeJS是一门单线程!异步!非阻塞语言!重要的事情说3遍。因为nodeJS

标签: nodejs爬取数据

本文链接地址:https://www.jiuchutong.com/biancheng/370699.html 转载请保留说明!

上一篇:Node.js的Express框架使用上手指南(node.js+express)

下一篇:node模块机制与异步处理详解(nodejs 模块)

  • 印花税需要每月缴纳吗
  • 印花税什么时候开始计入税金及附加
  • 城市维护建设税优惠政策
  • 长期借款利息费用计算
  • 红字发票重复提交了数据该怎么处理
  • 物流辅助服务属于什么费用
  • 营改增后计税依据
  • 无形资产使用费计入什么科目
  • 用于出口的进项可以抵扣吗
  • 贴现利息的计算题
  • 预交增值税附加税费减免吗
  • 企业所得税申报流程图
  • 重庆个人住房房产税申报
  • 住宿费专用发票会计分录
  • 高新技术企业怎么申报企业所得税
  • 报个税系统叫啥
  • 权益性投资损失包括哪些
  • 建筑业简易征收进项税额转出
  • 华硕主板如何刷系统
  • 进项票怎么做
  • synchost.exe - synchost是什么进程 有什么作用
  • 电脑c盘变红了怎么回事
  • 压缩包损坏修复软件
  • 账套没有以前年度调整
  • 总承包简易计税
  • 小规模纳税人两费减免
  • PHP:xml_set_unparsed_entity_decl_handler()的用法_XML解析器函数
  • 出口押汇算贷款吗
  • 收到员工罚款分录
  • 微前端架构实现
  • 确保政府采购
  • 土地出让金抵减增值税账务处理
  • thinkphp join
  • vue set up
  • 手把手教你用Excel制作考勤表
  • raisecom删除命令
  • 刚成立的新公司怎么报税
  • 手把手的教
  • 收到银行的贷款怎么入账
  • mysql慢查询日志查看
  • 发票开错对方已抵扣该怎么处理?
  • 企业固定资产账户核算的固定资产其所有权均属于本企业
  • mysql数据查询慢
  • 银行对账单电脑上怎么导出
  • 公允价值变动损益在利润表哪里
  • 不征税收入与免税收入的区别是什么
  • 汇总记账凭证会计核算形式下总分类账账页格式一般采用
  • 房地产开发结转成本
  • 月末应交增值税借方余额期末该怎么处理
  • 其他应付款贷方正数表示什么意思
  • 收到客户账款会计分录
  • 来料加工和进料加工的相同之处
  • 税控系统专用设备抵减增值税账务处理
  • 车间管理人员的福利费计入什么科目
  • 去年支付的费用,今年收到发票可以入账吗
  • 汇兑损益的账务处
  • 长期股权投资属于什么会计要素
  • 错误的原始凭证是什么
  • sql server错误和使用情况报告
  • 怎么用sql脚本创建数据库
  • 微软宣布将GPT接入操作系统
  • xp电脑显示屏显示不全
  • win10 edge浏览器在哪里
  • linux设置网络ip地址
  • scchost.exe - scchost是什么进程 有什么用
  • windows7模块安装程序可以关闭吗
  • perl 批量注释
  • 如何用python进行数据处理
  • unity开发用什么电脑比较好
  • javascript常用类型
  • 被调用的对象已与其客户端断开连接怎么办
  • shell脚本输入
  • js移动端拖拽
  • 字符串截取用什么方法
  • nodejs调用打印机驱动
  • 扇形的菜
  • 你真的了解摩羯座吗
  • js动态添加trtd
  • 汽车修理厂24小时修理
  • 增值税税控开票软件怎么下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设