转于:https://blog.csdn.net/fengzhizi76506/article/details/59229846

博主:fengzhizi76506

1)功能

 urllib模块提供的urlretrieve()函数,urlretrieve()方法直接将远程数据下载到本地。

2)格式

 import urllib.request

 urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

  • filename:指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • reporthook:一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头

:将baidu的html抓取到本地,保存在''./baidu.html"文件中,同时显示下载的进度。

#!/usr/bin/env python
# coding=utf-8
import os
import urllib.reuest def cbk(a,b,c):
'''''回调函数
@a:已经下载的数据块
@b:数据块的大小
@c:远程文件的大小
'''
per=100.0*a*b/c
if per>100:
per=100
print('%.2f%%' % per) url='http://www.baidu.com'
dir=os.path.abspath('.')
work_path=os.path.join(dir,'baidu.html')
urllib.request.urlretrieve(url,work_path,cbk)
#!/usr/bin/env python
# coding=utf-8
import os
import urllib.request def cbk(a,b,c):
'''''回调函数
@a:已经下载的数据块
@b:数据块的大小
@c:远程文件的大小
'''
per=100.0*a*b/c
if per>100:
per=100
print('%.2f%%' % per) url='http://www.baidu.com'
dir=os.path.abspath('.')
work_path=os.path.join(dir,'baidu.html')
urllib.request.urlretrieve(url,work_path,cbk)
#!/usr/bin/env python
# coding=utf-8
import os
import urllib.request def cbk(a,b,c):
'''''回调函数
@a:已经下载的数据块
@b:数据块的大小
@c:远程文件的大小
'''
per=100.0*a*b/c
if per>100:
per=100
print('%.2f%%' % per) url='http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
dir=os.path.abspath('.')
work_path=os.path.join(dir,'Python-2.7.5.tar.bz2')
urllib.request.urlretrieve(url,work_path,cbk)

 3)urlopen()可以轻松获取远端html页面信息,然后通过Python正则对所需要的数据进行分析,匹配出想要用的数据,再利用urlretrieve()将数据下载到本地。

  A、对于访问受限或者对连接数有限制的远程url地址,可以采用proxies(代理IP)连接;

  B、如果远程连接数据量过大,单线程下载太慢的话可以采用多线程下载;

  这个就是传说中的爬虫

最新文章

  1. Nodejs - 如何用 eventproxy 模块控制并发
  2. Ninject之旅之七:Ninject依赖注入
  3. Task.Run Vs Task.Factory.StartNew
  4. sequelize翻译(1)
  5. hdu 1021
  6. 超实用的JavaScript代码段 Item4 --发送短信验证码
  7. Windows 小技巧: 變更輸入法順序
  8. dubbo 服务化
  9. C#又能出来装个B了。一步一步微信跳一跳自动外挂
  10. Java过滤器Filter使用详解
  11. CentOs下手动升级node版本
  12. 【Storm篇】--Storm 容错机制
  13. Insert 导致死锁的两种情况
  14. <构建之法>第11、12章
  15. UVALive - 6442 (思维题)
  16. FJUT16级第一周寒假作业题解G题
  17. MySQL 8.0的关系数据库新特性详解
  18. android studio 3.0 集成ijkplayer
  19. Day1-python基础
  20. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

热门文章

  1. python基础-第五篇-5.1冒泡排序
  2. python-安装 pip
  3. Java之线程池(二)
  4. 【SHARE】WEB前端学习资料
  5. php验证复选框的小例子
  6. ScreenOS学习笔记
  7. Vim 的命令模式转插入模式
  8. Jquery的load()
  9. Qt版权介绍:GPL, LGPL 以及 Commercial 授权
  10. HIVE- 大数据运维之hive管理