• 获取网页乱码


    1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码。

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

    不乱码:curl www.55wd.com |more
    乱码:curl -H "Accept-Encoding: gzip"www.55wd.com | more
    不乱码:curl -H "Accept-Encoding: gzip"www.55wd.com | gunzip | more

    下面的a,b解释的是www.wode007.com,c,d解释是的www.55wd.com

    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解压缩,则基本上可以保存数据不乱码。

    素材公社https://www.wode007.com/sites/73209.html 爱图网https://www.wode007.com/sites/73208.html

    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系统乱码的问题的解决方案之一:

    curl http://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头部信息的一个数组
    后者是将头文件的信息以数据流的方式输出
     
  • 相关阅读:
    Java Native Method
    SQL语句优化
    Ibatis的环境搭建以及遇到的问题解决
    Java 构建器
    SpringMVC自定义视图 Excel视图和PDF视图
    java 枚举的常见使用方法
    mysql 根据某些字段之和排序
    MFC The Screen Flickers When The Image Zoomed
    How To Debug Qmake Pro File
    Gcc And MakeFile Level1
  • 原文地址:https://www.cnblogs.com/ypppt/p/13353761.html
Copyright © 2020-2023  润新知