1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。
乱码:curl www.1ting.com |more
乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | more
不乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | gunzip | more

不乱码:curl www.1616.net |more
乱码:curl -H "Accept-Encoding: gzip"www.1616.net | more
不乱码:curl -H "Accept-Encoding: gzip"www.1616.net | gunzip | more

下面的a,b解释的是www.1ting.com,c,d解释是的www.1616.net
a.某个url,如果用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
b.某个url,如果用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。

c.某个url,如果用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
d.某个url,如果用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。

小总:
也就是说在curl后面加上Accept-Encoding:gzip,再用gunzip解压缩,则基本上可以保存数据不乱码。

2.GBK或者UTF8汉字之类的乱码

iconv命令是运行于linux平台的文件编码装换工具。当我们在linux系统shell下通过curl命令或者wget命令获取一个网页的源代码,当网页的编码与当前操作系统坏境的设置的编码不同时,就会发现网页中有很多乱码。如在网页"meta"标签"charset"属性值设置为"gb2312"的http://www.baidu.com百度首页,在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统即会产生中文乱码现象。这时我们可以尝试使用iconv命令进行编码装换,让中文不在是乱码。如下命令是处理百度在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统乱码的问题的解决方案之一:

curlhttp://www.baidu.com|iconv -fgb2312 -t utf-8

当然,你也通过改变系统坏境变量与百度首页的"charset"值一致,也可以解决此乱码问题,如下命令:

set LANG="gb2312"

export LANG

curl http://www.baidu.com

iconv命令的详细语法:

iconv [选项..] [文件..]
选项:
-f 输入编码
-t 输出编码
-l 列出所有已知的编码
-o 输出文件

对比采用PHP CURL库的POST GETHEADER三种方法之间的差异

比较POST GETHEADER这三种方法的区别:

参数

POST

GET

HEADER

CURLOPT_URL

CURLOPT_POST

开启

关闭

关闭

CURLOPT_HTTPHEADER

如果有$header,则开启

如果有$header,则开启

如果有$header,则开启

CURLOPT_HEADER

False

False

True

CURLOPT_NOBODY

false

False

true

CURLOPT_POSTFILEDS

True

false

false

从上表中可以看出:

POST方法:开启POST连接,然后发送POST报文体。关闭HEADER和NOBODY

GET方法:关闭POST相关的选项,关闭NOBODYHEADER,仅仅只是开启curlopt_httpheader

HEADER方法:开启HEADER和NOBODY,关闭POST相关的选项。

应该说上述三种方法,一个明显的区别是,箱采用什么方法的时候,就开启对应的CURL选项。

CURL_HTTPHEADER与CUROPT_HEADER的区别:

前者是设置HTTP头部信息的一个数组

后者是将头文件的信息以数据流的方式输出

转:http://www.xuebuyuan.com/1047685.html

shell用curl抓取页面乱码,参考一下2方面(转)的更多相关文章

  1. 好用的 curl 抓取 页面的封装函数

    由于经常使用php curl 抓取页面的内容,在此mark 平时自己封装的 curl函数,(其实 现在也开始用 Python 来爬了~ ^-^) /** * 封装curl方法 * @author Fr ...

  2. curl抓取页面时遇到重定向的解决方法

    用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: <?php function curlGet($url) { $ch = curl_init(); curl_setopt($ ...

  3. 通过CURL抓取页面中的图片路径并下载到本地

    1.首页是图片处理页面downpic.php <?phpfunction getImage($url,$filename="") { if($url=="" ...

  4. PHP使用CURL抓取页面

    cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php //1.初始化,创 ...

  5. curl 抓取页面信息

    <?php // 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch, CURLOPT_URL, "www" ...

  6. PHP使用CURL抓取网页

    CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...

  7. php curl抓取远程页面内容的代码

    使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...

  8. HtmlAgilityPack 抓取页面的乱码处理

    HtmlAgilityPack 抓取页面的乱码处理 用来解析 HTML 确实方便.不过直接读取网页时会出现乱码. 实际上,它是能正确读到有关字符集的信息,怎么会在输出时,没有取到正确内容. 因此,读两 ...

  9. php抓取页面的几种方法详解

    本篇文章是对php抓取页面的几种方法进行了详细的分析介绍,需要的朋友参考下 在 做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求 ...

随机推荐

  1. mysql客户端(Navicat)远程登录操作遇到问题1142 - XXX command denied to ×××

    新建的dbtest用户,访问新建立的TestDB数据库每次都提示1142错误(已经对数据库TestDB赋予了所有权限) 解决方法: Mysql命令: GRANT SELECT ON mysql.* T ...

  2. 格林威治时间格式(GMT)与普通时间格式的互相转换

    GMT --> 普通时间格式: 方法: function GMTToStr(time){ var date = new Date(time) var Str=date.getFullYear() ...

  3. 超多的CSS3圆角渐变网页按钮

    <!DOCTYPE html><head><title>超多的CSS3圆角渐变按钮</title><style type="text/c ...

  4. Windoows窗口程序二

    WNDCLASS属性style取值: CS_GLOBALCLASS--应用程序全局窗口类 CS_BYTEALIGNCLIENT--窗口客户区的水平位置8倍数对齐 CS_BYTEALIGNWINDOW- ...

  5. Qt 自定义事件的实现

    初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event ...

  6. 数据库之“on”“where”区别

    数据库在通过连接两张或者多张表返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户 在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的 ...

  7. 关于Cocos2d-x中物理世界的物体乱跳的问题的解决

    这是电脑短时间内帧率低,无法满足游戏配置的帧率引起的. 解决方法: 第一种: 1.打开AppDelegate.cpp文件 2.把director->setAnimationInterval(1. ...

  8. tensorflow中slim模块api介绍

    tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35   http://blog.csdn.net/guvcolie/article/details/77686 ...

  9. (转)platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备

     platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备 2011-10-24 19:47:07 分类: LINUX   kernel_init中d ...

  10. CCF - 最大矩形

    试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n ...