4.1 urllib--通过URL打开任意资源--2
Posted 左右1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中,还可以使用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的主要内容,如果未能解决你的问题,请参考以下文章
[Python]网络爬虫:利用urllib通过指定的URL抓取网页内容
[Python]网络爬虫:利用urllib通过指定的URL抓取网页内容
Python爬虫 urllib -- urllib 下载资源urllib 请求对象的定制(URL完整组成介绍HTTP协议和HTTPS的区别请求对象的定制)