码迷,mamicode.com
首页 > Web开发 > 详细

4.1 urllib--通过URL打开任意资源--2

时间:2017-09-01 17:48:58      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:date   url编码   成功   根目录   pow   有关   user   geturl   内容   

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

思路如下:
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中,还可以使用urllib.request里面的urlretrieve()函数
直接将对应信息写入本地文件,格式为:“urllib.request.urlretrieve(url,filename=本地文件地址)”。
比如,我们可以直接使用该方式将网页写入本地文件,输入:

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

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

#记住,是在python3中执行。



如果希望返回与当前环境有关的信息,我们可以使用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

4.1 urllib--通过URL打开任意资源--2

标签:date   url编码   成功   根目录   pow   有关   user   geturl   内容   

原文地址:http://www.cnblogs.com/papapython/p/7464008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!