NodeJS抓取Web页面的编码问题

  最近在做毕设需要用到的爬虫系统,页面抓取这一块使用的是NodeJS语言,在最开始写的页面抓取的程序中,针对gb2312编码的页面保存完后显示的是乱码,开始认为在用Java读取文件时进行一个编码转换工作就可以解决了,但是试了半天,编码只会越来越慢,后来猜想,NodeJS请求到的页面的Body传输过来的是二进制的流信息,如果采用错误的编码方式对二进制信息进行解码,那么得到的结果坑定是错误的,再将这种结果保存到文件中,结果肯定还是错的,所以,通过上述的方法,不可能得到正确的结果。

  后来的解决方法是,在NodeJS中,对二进制数据进行解码,通过正则表达式获取文件正确的编码,再用正确的编码对二进制数据进行解码,最终得到正确的结果。

  在请求页面信息时,有些网站由于页面内容过多,对页面中的内容进行了压缩,可以通过Headers[‘content-code‘]查看页面压缩所使用的压缩方法,针对这种页面,在解析前,必须先对流信息进行解压缩,得到完整的流信息后,再采用上述的方法对信息进行解码操作。

  NodeJS中关于编码操作,使用的是iconv-lite库,压缩与解压缩采用的是zlib库。

时间: 2024-12-21 02:08:03

NodeJS抓取Web页面的编码问题的相关文章

Winform实现抓取web页面内容的方法

本文以一个非常简单的实例讲述了Winform实现抓取web页面内容的方法,代码简洁易懂,非常实用!分享给大家供大家参考. 具体实现代码如下: WebRequest request = WebRequest.Create("http://1.bjapp.sinaapp.com/play.php?a=" + PageUrl); WebResponse response = request.GetResponse(); Stream resStream = response.GetRespo

nodejs抓取别人家的页面的始末

内容:分析并获取页面调取数据的API(接口),并跨域获取数据保存在文档中(nodejs做代理-CORS) 事由以及动机 2015年9月份全国研究生数学建模竞赛的F题,旅游线路规划问题.其中需要自己去查很多数据.例如所给201个5A级景区的位置,以及景区距离所在省会距离等等-开始队友小伙伴准备从百度手动去一个一个查询,但是效率极低,在这么短的时间内,需要收集这么多数据是多么的耗时,并且也不能把大把时间花费在查资料上,虽然说查资料是必须的,题目也鼓励我们从网上查询相关数据,因此在团队中的我就想到了让

nodejs抓取网络图片转换为base64编码的图片

抓取网络图片需要加载http模块 //假定这是index.js文件 var http = require('http'); var url = 'http://p0.meituan.net/tuanpic/3df525af5a3f7fe04077567d2a6caf794904.png';  //一张网络图片 http.get(url,function(res){ var chunks = []; //用于保存网络请求不断加载传输的缓冲数据 var size = 0; //保存缓冲数据的总长度

Winfrom 抓取web页面内容代码

WebRequest request = WebRequest.Create("http://1.bjapp.sinaapp.com/play.php?a=" + PageUrl); WebResponse response = request.GetResponse(); Stream resStream = response.GetResponseStream(); StreamReader sr = new StreamReader(resStream, System.Text.

nodejs抓取页面内容,并分析有无某些内容的js文件

nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作! 举个例子,比如要在页面中找有没有www.baidu.com,不多说了,直接放代码: //引入模块 var http = require("http"), fs = require('fs'), url = require('url'); //写入文件,把结果写入不同的文件 var writeRes = function(p, r)

scrapy抓取的页面中文会变成unicode字符串

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 现象:从scrapy抓取的页面中文会变成unicode字符串,如下图 2017-03-28 23:00:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.lagou.com/jobs/2617468.html> {'describe': [u'<div>\n <p>\u5c97\u

Python使用lxml模块和Requests模块抓取HTML页面的教程

Web抓取Web站点使用HTML描述,这意味着每个web页面是一个结构化的文档.有时从中 获取数据同时保持它的结构是有用的.web站点不总是以容易处理的格式, 如 csv 或者 json 提供它们的数据. 这正是web抓取出场的时机.Web抓取是使用计算机程序将web页面数据进行收集 并整理成所需格式,同时保存其结构的实践. lxml和Requestslxml(http://lxml.de/)是一个优美的扩展库,用来快速解析XML以及HTML文档 即使所处理的标签非常混乱.我们也将使用 Requ

用C#抓取AJAX页面的内容

现在的网页有相当一部分是采用了AJAX技术,不管是采用C#中的WebClient还是HttpRequest都得不到正确的结果,因为这些脚本是在服务器发送完毕后才执行的! 但我们用IE浏览页面时是正常的,所以解决方法只有1个就是采用WebBrowser控件 但是使用Webbrowser你会发现,在DownloadComplete事件中,你根本无法知道页面何时才算是真正的加载完毕! 当然个别有Frame的网页可能会触发多次Complete,即使你采用计数器的办法,即在Navigated事件中++,而

C#抓取AJAX页面的内容

原文 C#抓取AJAX页面的内容 现在的网页有相当一部分是采用了AJAX技术,所谓的AJAX技术简单一点讲就是事件驱动吧(当然这种说法可能很不全面),在你提交了URL后,服务器发给你的并不是所有是页面内容,而有一大部分是JS脚本,即用<JAVASCRIPT标签表示的,这其中有些是链接了外部的JS文件,有些是内置的JS脚本,这些脚本是在客户端加载了服务器发回来的源码后才执行的,所以不管是采用C#中的WebClient还是HttpRequest都得不到正确的结果,因为这些脚本是在服务器发送完毕后才执