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

时间: 2024-10-27 18:43:14

4.1 urllib--通过URL打开任意资源--2的相关文章

iw14.0.50来了,终于可以直接在地址栏输入url打开iw功能页面了;可以自由使用EasyUI等js框架了;显示模式对话框也不再七绕八绕惹人烦了;

示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. iw14.0.50来了,在新的版本中最吸引我的就是增加了完善的httphandler功能:终于可以直接在地址栏输入url打开iw功能页面了:可以自由使用EasyUI等js框架了:显示模式对话框也不再七绕八绕惹人烦了:呵呵,我感觉iw第一次接近主流web开发工具了! 兴奋过了,来尝试一下吧.其实iw的坑还是挺多的,虽然已经接近主流了,但

IIS:打开任意 .aspx 页面,提示 404 错误

环境:win2003 sp2 x64 + iis 6.0 + asp.net 2.0 问题描述 IIS 打开任意 .aspx 页面,提示 404 错误 无法找到该页 问题解决 IIS 的 "Web 服务扩展",找到"ASP.NET v2.0.50727"项,设置为"允许". 如果找不到"ASP.NET v2.0.50727"项,可能是: 1.未安装 .NET Framework 2.0,请先安装: 2..net2.0已经安装,

crm使用url打开窗体视图

//URL可寻址元素使您可以包括指向Microsoft Dynamics CRM窗体. 视图. 对话框和其他应用程序中的报告. //这样,您就可以轻松扩展其他应用程序.报表或网站,以便用户无需切换应用程序即可查看信息和执行操作 //当使用 Xrm.Page.context.getServerUrl 方法检索组织根 URL 时, //由 Microsoft Dynamics CRM Online 返回的字符串包含一个结尾正斜线字符. //如果不删除此结尾正斜线,就不会显示功能区.您应删除此字符,以

2-scala文件操作--自动关闭打开的资源,读取properties文件

简介 使用scala的loan pattern自动关闭打开的资源 读取properties文件 依赖的jar 使用scala_arm库自动关闭资源文件时,需要引入以下依赖: <dependency> <groupId>com.jsuereth</groupId> <artifactId>scala-arm_${scala.binary.version}</artifactId> <version>1.4</version>

HTML高级教程(7)——HTML URL(统一资源定位器)

HTML链接 当你单击 HTML 文档中的某个链接时,就像这个:最后一页,其中的 <a> 标签就会使用类似这样的 href 属性值指向一个网络上的地址:<a href="lastpage.htm">Last Page</a> 在这个例子中,Last Page 的链接地址是相对于你所浏览的网站而言的,你的浏览器会自动构建一个完整的网址来访问这个页面,比如 http://www.w3school.com.cn/html/lastpage.html. UR

使用微软URLRewriter.dll的url实现任意后缀名重写

<?xml version="1.0"?> <!--先引用URLRewriter.dll,放置于Bin目录--> <configuration> <configSections> <!--配置重写规则节点--> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHand

短信外部浏览器H5链接一键跳转微信打开任意站

今天讲讲微信跳转的那些事情,这项技术最早出现在在线广告上面,可以从外部引流到微信并打开微信内置浏览器然后打开一个指定的网页地址,在这个网页里面可以放任何想推广的内容,可以是引导文案.活动内容,或者是一个引导添加关注的二维码,因为在微信里面用户已经习惯看见二维码长按识别添加关注操作: 从外部浏览器打开微信并打开指定的网址,做到现在应该历经了几个版本,如一开始的可以打开任意网址,到后面打开指定域名下的网址,到现在只能打开一张自定义图片,其实这项服务最关键的价值就是流量转换吸粉.降低在线广告的成本,很

IIS8集成模式下打开静态资源被aspx处理程序处理,StaticFileModule失效问题分析

问题描述: 打开js,css,jpg之类的静态资源文件触发了asp.net mvc的权限认证,并不是直接返回静态内容 问题分析: StaticFileModule 失效 ,可能是文件权限问题 问题解决: 由于在集成模式下,默认进程标识是应用程序池名称相同的"用户", 如应用程序池为 tom, 那么在进程管理器中,w3wp.exe的用户即为tom 而IIS中要动态的为这种标识设计权限则需要同时给 IIS_IUSERS组  和  IUSR组设置完全控制权限!!! 记得是同时设置. 如果仅给

Python使用urllib时url带中文参数的问题

urllib.request.urlopen(url).read().decode('utf-8') url中带中文参数会出错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 84-86: ordinal not in range(128) 需要对中文进行转码 url = GEOCODE_BASE_URL + urllib.parse.quote('北京市') 文档中对urlib.parse.quote的