zoukankan      html  css  js  c++  java
  • 4.1 urllib--通过URL打开任意资源--2

    此时,我们已经成功实现了一个网页的爬取,如何将获得的网页以网页的形式保存到本地呢?

    思路如下:
    1 首先爬取到一个网页并将爬取到的内容读取出来赋值给一个变量
    2 以写的方式打开一个本地文件,命名为*.html等网页格式
    3 将1 中变量的值写入该文件中。
    4 关闭该文件

    所以我们刚才已经成功获取到了百度首页的内容并读取赋给了变量data,接着可以通过
    一下代码实现将爬取到的网页保存到本地。

    fhandle=open("E:/1.html","w")
    fhandle.write(data)
    fhandle.close()

    执行完该操作后,即可以将对应文件保存在E盘中的根目录中,我们首先通过open()函数
    打开了该文件,并以"w"二进制写入的方式打开,打开后将句柄赋给变量fhandle,然后
    使用write()方法写入了对应的数据data,接着在通过close()方法关闭该文件,有始有终。

    从根目录中可以查找到1.html文件。
    然后利用浏览器打开这个文件后,我们发觉进入了百度首页的页面,不过就是缺少图片
    ,我也不知道为什么就缺少图片,

    除了这种方法之外,在python中,还可以使用urllib2.request里面的urlretrieve()函数
    直接将对应信息写入本地文件,格式为:“urllib2.request.urlretrieve(url,filename=本地文件地址)”。
    比如,我们可以直接使用该方式将网页写入本地文件,输入:

    filename = urllib2.request.urlretrieve("http://edu.51cto.com",filename="D:/2.html")

    执行后,成功将“http://edu.51cto.com”保存到了本地,打开后若进入了首页则爬取成功。



    如果希望返回与当前环境有关的信息,我们可以使用info()返回,比如可以执行:
    print file.info()

    结果为:
    Date: Fri, 01 Sep 2017 08:35:19 GMT
    Content-Type: text/html; charset=utf-8
    Transfer-Encoding: chunked
    Connection: Close
    Vary: Accept-Encoding
    Set-Cookie: BAIDUID=24942564BED35EC70DF96034AB71D9A3:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: BIDUPSID=24942564BED35EC70DF96034AB71D9A3; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: PSTM=1504254919; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=0; path=/
    Set-Cookie: H_PS_PSSID=1439_21104_17001_20928; path=/; domain=.baidu.com
    P3P: CP=" OTI DSP COR IVA OUR IND COM "
    Cache-Control: private
    Cxy_all: baidu+71a6cd1e799e7f19eaadfd7f1425610a
    Expires: Fri, 01 Sep 2017 08:35:14 GMT
    X-Powered-By: HPHP
    Server: BWS/1.1
    X-UA-Compatible: IE=Edge,chrome=1
    BDPAGETYPE: 1
    BDQID: 0xd8add75f0004af5a
    BDUSERID: 0
    可以看到,输出了对应的info,调用格式则为:“爬取的网页.info()”,我们之前爬取到的网页赋给了变量file,所以此时通过file调用。


    如果希望获取当前爬取网页的状态码,我们可以使用getcode(),若返回200为正确,
    返回其他则不正确,调用格式则为:“爬取的网页.getcode()”。在该例中,我们可以执行:

    print file.getcode()
    200

    可以看到,此时返回了状态码200,说明此时响应正确。

    如果想要获取当前所爬取的URL地址,我们可以使用geturl()来实现,调用格式则为:“爬取的网页.geturl()”,本例中,
    可以通过如下代码获取:

    print file.geturl()
    http://www.baidu.com

    可以看到,此时输出了爬取的源网页地址为'http://www.baidu.com'。

    一般来说,URL标准中只会云去一部分ASCII字符比如,数字、字母、部分符号等,而其他的
    一些字符、比如汉字等,是不符合URL标准的。所以如果我们在URL中使用一些其他不符合
    标准的字符就会出现问题,此时需要进行URL编码方可解决。比如在URL中输入中文问或者
    ":"或者"&"等不符合标准的字符时,需要编码。

    如果要进行编码,我们可以使用urllib.quote()进行,比如,我们要对网址”http://www.sina.com.cn“
    进行编码,可以使用如下代码:

    print urllib.quote("http://www.sina.com.cn")

    结果如下:
    http%3A//www.sina.com.cn

    那么相应的,有编码就有解码,可以通过urllib.unquote()进行实现,就对我们刚才的编码网址
    进行解码

    print urllib.unquote("http%3A//www.sina.com.cn")
    结果如下;
    http://www.sina.com.cn

  • 相关阅读:
    ckeditor 3.0.1使用
    也谈QQ表情弹出框的制作
    百度的模态弹出窗口
    day03 set集合,文件操作,字符编码以及函数式编程
    写在开始之前
    day07 类的进阶,socket编程初识
    day06 面向对象编程
    day02 Python 的模块,运算,数据类型以及方法
    day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
    day08 多线程socket 编程,tcp粘包处理
  • 原文地址:https://www.cnblogs.com/papapython/p/7464008.html
Copyright © 2011-2022 走看看