参考链接: Python Urllib模块

urllib模块提供的上层接口使用户能够像读取本地文件一样读取WWW或FTP上的数据,使用起来比C++、C#等编程语言更加方便。

常用的方法如下:

1、urlopen

urlopen(url , data = None ,proxies = Nonne)

该方法用于创建一个远程URL的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址;参数data表示post方式提交到url的数据;参数proxies用于设置代理;返回值是一个类文件对象。

urlopen常用方法:

方法用途read(), readlines() , close()这些方法的使用方式与文件对象完全一样,包括文件的读取和文件的关闭操作info()返回一个httplib,HTTPMessage对象;表示远程服务器返回的头信息geturl()返回请求的URL getcode()返回HTTP状态码。如果是 HTTP 请求,则返回200表示请求成功完成,404表示网址未找到

下面看一下代码:

import urllib.request

import webbrowser as web

url = "http://www.baidu.com"

content = urllib.request.urlopen(url)

print(content.info())   #头信息

print(content.geturl())    #请求url

print(content.getcode())    #HTTP状态字

#保存网页至本地浏览器打开

open("baidu.html","wb+").write(content.read())

web.open_new_tab("baidu.html")

由于我使用的是Python3.7.0所以代码会和老师书上写的有一些不同,老师使用的是Python2.6版本如果按照老师的写会有以下两个错误:

Traceback (most recent call last):

File "D:\Python\first reptile\first reptile.py", line 4, in <module>

content = urllib.urlopen(url)

AttributeError: module 'urllib' has no attribute 'urlopen'

>>>

这个错误解决的办法是将语句:

import urllib

import webbrowser as web

url = "http://www.baidu.com"

content = urllib.urlopen(url)

改为 :

import urllib.request

import webbrowser as web

url = "http://www.baidu.com"

content = urllib.request.urlopen(url)

第二个错误是:

Traceback (most recent call last):

File "D:\Python\first reptile\first reptile.py", line 12, in <module>

open("baidu.html","w").write(content.read())

TypeError: write() argument must be str, not bytes

>>>

错误产生的原因是因为存储方式默认是二进制,将代码:

open("baidu.html","w").write(content.read())

改为:

open("baidu.html","wb+").write(content.read())

整段代码的运行结果:

Bdpagetype: 1

Bdqid: 0xc80a20df00045830

Cache-Control: private

Content-Type: text/html

Cxy_all: baidu+806ada47b0e62b5e79c07a42e495ba04

Date: Sat, 02 Feb 2019 02:44:46 GMT

Expires: Sat, 02 Feb 2019 02:44:43 GMT

P3p: CP=" OTI DSP COR IVA OUR IND COM "

Server: BWS/1.1

Set-Cookie: BAIDUID=6AE9E5C3D0C9D4508063A0C60B4B0275:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: BIDUPSID=6AE9E5C3D0C9D4508063A0C60B4B0275; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: PSTM=1549075486; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: delPer=0; path=/; domain=.baidu.com

Set-Cookie: BDSVRTM=0; path=/

Set-Cookie: BD_HOME=0; path=/

Set-Cookie: H_PS_PSSID=1431_21105_28329_26350_22158; path=/; domain=.baidu.com

Vary: Accept-Encoding

X-Ua-Compatible: IE=Edge,chrome=1

Connection: close

Transfer-Encoding: chunked

http://www.baidu.com

200

>>>

代码说明 :调用urllib.request.urlopen(url)函数打开百度链接,并输出头信息、url、HTTP状态码等信息

代码import webbrowser as web引用webbrowser第三方库,因此可以使用类似 module_name.method调用对应的函数。

open("baidu.html","wb+").write(content.read())表示在本地创建静态的baidu.html文件,并读取打开的百度网页内容,执行文件写操作。

web.open_new_tab("baidu.html")表示通过浏览器打开已经下载的静态网页新标签。当然也可以使用web.open_new_tab("http://www.baidu.com")在浏览器中直接打开在线网页。

2、urlretrieve

urlretrieve方法是将远程数据下载到本地

urlretrieve(url , filename = None ,  reporthook = None , data = None)

参数filename指定了保存到本地的路径,如果省略该参数 ,则urllib会自动生成一个临时文件来保存数据;参数reporthook是一个回调函数,当连接上服务器,相应的数据块传输完毕时,会触发该回调函数,通常使用该回调函数来显示当前的下载进度;参数data是指传递到服务器的数据。

下面通过例子来演示如何将新浪首页爬取到本地,并保存在“D:/xinlang.html”文件中,同时显示下载进度:

import urllib.request

#函数功能:下载文件至本地,并显示下载进度

#a-已经下载的数据块,b-数据块的大小,c-远程文件的大小

def Download(a,b,c):

per = 100.0 *a*b/c

if per > 100:

per = 100

print('%.2f' % per)

url = 'http://www.sina.com.cn'

local = 'D://xinlang.html'

urllib.request.urlretrieve(url , local ,Download)

运行结果:

-0.00

-819200.00

-1638400.00

-2457600.00

-3276800.00

-4096000.00

-4915200.00

-5734400.00

-6553600.00

-7372800.00

-8192000.00

-9011200.00

-9830400.00

-10649600.00

-11468800.00

-12288000.00

-13107200.00

-13926400.00

-14745600.00

-15564800.00

-16384000.00

-17203200.00

-18022400.00

-18841600.00

-19660800.00

-20480000.00

-21299200.00

-22118400.00

-22937600.00

-23756800.00

-24576000.00

-25395200.00

-26214400.00

-27033600.00

-27852800.00

-28672000.00

-29491200.00

-30310400.00

-31129600.00

Traceback (most recent call last):

File "D:\Python\first reptile\first reptile.py", line 11, in <module>

urllib.request.urlretrieve(url , local ,Download)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 276, in urlretrieve

block = fp.read(bs)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 447, in read

n = self.readinto(b)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 481, in readinto

return self._readinto_chunked(b)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 576, in _readinto_chunked

chunk_left = self._get_chunk_left()

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 544, in _get_chunk_left

chunk_left = self._read_next_chunk_size()

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 504, in _read_next_chunk_size

line = self.fp.readline(_MAXLINE + 1)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\socket.py", line 589, in readinto

return self._sock.recv_into(b)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1049, in recv_into

return self.read(nbytes, buffer)

File "C:\Users\xiaoyi\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 908, in read

return self._sslobj.read(len, buffer)

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

>>>

[转载] Python—urllib模块相关推荐

  1. pythonurllib模块-Python urllib模块 网络资源访问安装下载

    urllib是Python标准库最为常用的一个python网络应用资源访问的模块了,它可以让你像访问本地文本文件一样,读取网页的内容. Python urllib的作用是访问一些不需要验证的网络资源和 ...

  2. pythonurllib模块-Python urllib模块与urlopen()函数解析

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 下面是在 Python Shell 里的 urllib 的使用情况: Python ...

  3. python urllib模块的urlopen()的使用方法

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 1.urllib模块urlopen()函数: urlopen(url, data=N ...

  4. python urllib模块

    urllib模块 urllib.request模块 版本介绍 常用方法 响应对象 urllib.parse模块 常用方法 请求方式 urllib.request模块 版本介绍 在python3.0之前 ...

  5. python urllib模块学习笔记

    这个模块是最基本最常用的,以前看过,总结一下 # coding : utf-8 import urllib url = 'http://cnblogs.com' #代理服务器 proxies = {' ...

  6. [python]python urllib 模块

    Urllib是python内置的HTTP请求库 包括以下模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.r ...

  7. [转载] python 第三方模块

    参考链接: Python | Django-allauth设置和配置 Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单 ...

  8. python模块的发布_(转载)Python中模块的发布与安装

    模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...

  9. python中weekday_[转载] Python日历模块| 使用示例的weekday()方法

    参考链接: Python中的日历函数 2(monthrange(),prcal(),weekday()-) Python calendar.weekday()方法 (Python calendar.w ...

最新文章

  1. Java学习总结:30
  2. 报javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception异常 的解决方案...
  3. 纯JS实现带小圆点缩略图及左右箭头的轮播图
  4. 糖尿病动物模型知识点整理
  5. 【NLP】关系提取简述
  6. vivado 开发教程(二) 使用IP集成器
  7. 含泪整理最优质草食动物unity3d模型素材,你想要的这里都有
  8. Hook技术(1):Hook技术简介
  9. 安全模式解除android,手机安全模式怎么解除
  10. 工信部颁发“免死金牌” 抢票软件继续存活
  11. 使用teamviewer和向日葵时Visual studio等软件显示全白或者全黑的解决办法!
  12. dom4j解析xml错误-version 后面跟随的值必须是用引号括起来的字符串
  13. Unity解析和读取文本—— txt 文件
  14. 实战演练 | MySQL PROCESSLIST 表和 Navicat Monitor 识别慢速查询的简单方法
  15. PHP通过api上传图片
  16. IaC示例:Terraform Ansible自动化创建K3S集群
  17. 微信小程序学习总结1
  18. xp系统计算机语言设置,XP系统语言栏不见了解决方法
  19. 拯救熊猫眼!戒除手机瘾!不做手机控,全靠它了!
  20. 免费获取全球10米分辨率的土地分类数据!

热门文章

  1. linux7删除网卡文件,CentOS 7下删除virbr0网卡信息
  2. increment java_post-increment, pre-increment. JAVA
  3. 解决fullgc_CMS发生FullGc分析
  4. 计算机网络—TCP协议
  5. Brupsuit的安装与初步使用
  6. Linux下编写简单的程序
  7. Wannafly挑战赛21: C. 大水题(DP)
  8. 关系代数操作应用、关系元组运算应用
  9. [深度学习] 神经网络中的 batch 和 epoch
  10. python机器学习案例系列教程——集成学习(Bagging、Boosting、随机森林RF、AdaBoost、GBDT、xgboost)