我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴。

1、最简单

  1. import urllib.request
  2. response = urllib.request.urlopen('http://python.org/')
  3. html = response.read()

2、使用 Request

  1. import urllib.request
  2. req = urllib.request.Request('http://python.org/')
  3. response = urllib.request.urlopen(req)
  4. the_page = response.read()

3、发送数据

  1. #! /usr/bin/env python3
  2. import urllib.parse
  3. import urllib.request
  4. url = 'http://localhost/login.php'
  5. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
  6. values = {
  7. 'act' : 'login',
  8. 'login[email]' : 'yzhang@i9i8.com',
  9. 'login[password]' : ''
  10. }
  11. data = urllib.parse.urlencode(values)
  12. req = urllib.request.Request(url, data)
  13. req.add_header('Referer', 'http://www.python.org/')
  14. response = urllib.request.urlopen(req)
  15. the_page = response.read()
  16. print(the_page.decode("utf8"))

4、发送数据和header

  1. #! /usr/bin/env python3
  2. import urllib.parse
  3. import urllib.request
  4. url = 'http://localhost/login.php'
  5. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
  6. values = {
  7. 'act' : 'login',
  8. 'login[email]' : 'yzhang@i9i8.com',
  9. 'login[password]' : ''
  10. }
  11. headers = { 'User-Agent' : user_agent }
  12. data = urllib.parse.urlencode(values)
  13. req = urllib.request.Request(url, data, headers)
  14. response = urllib.request.urlopen(req)
  15. the_page = response.read()
  16. print(the_page.decode("utf8"))

5、http 错误

  1. #! /usr/bin/env python3
  2. import urllib.request
  3. req = urllib.request.Request('http://www.jb51.net ')
  4. try:
  5. urllib.request.urlopen(req)
  6. except urllib.error.HTTPError as e:
  7. print(e.code)
  8. print(e.read().decode("utf8"))

6、异常处理1

  1. #! /usr/bin/env python3
  2. from urllib.request import Request, urlopen
  3. from urllib.error import URLError, HTTPError
  4. req = Request("http://www.jb51.net /")
  5. try:
  6. response = urlopen(req)
  7. except HTTPError as e:
  8. print('The server couldn't fulfill the request.')
  9. print('Error code: ', e.code)
  10. except URLError as e:
  11. print('We failed to reach a server.')
  12. print('Reason: ', e.reason)
  13. else:
  14. print("good!")
  15. print(response.read().decode("utf8"))

7、异常处理2

  1. #! /usr/bin/env python3
  2. from urllib.request import Request, urlopen
  3. from urllib.error import URLError
  4. req = Request("http://www.jb51.net /")
  5. try:
  6. response = urlopen(req)
  7. except URLError as e:
  8. if hasattr(e, 'reason'):
  9. print('We failed to reach a server.')
  10. print('Reason: ', e.reason)
  11. elif hasattr(e, 'code'):
  12. print('The server couldn't fulfill the request.')
  13. print('Error code: ', e.code)
  14. else:
  15. print("good!")
  16. print(response.read().decode("utf8"))

8、HTTP 认证

  1. #! /usr/bin/env python3
  2. import urllib.request
  3. # create a password manager
  4. password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
  5. # Add the username and password.
  6. # If we knew the realm, we could use it instead of None.
  7. top_level_url = "https://www.jb51.net /"
  8. password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx')
  9. handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
  10. # create "opener" (OpenerDirector instance)
  11. opener = urllib.request.build_opener(handler)
  12. # use the opener to fetch a URL
  13. a_url = "https://www.jb51.net /"
  14. x = opener.open(a_url)
  15. print(x.read())
  16. # Install the opener.
  17. # Now all calls to urllib.request.urlopen use our opener.
  18. urllib.request.install_opener(opener)
  19. a = urllib.request.urlopen(a_url).read().decode('utf8')
  20. print(a)

9、使用代理

  1. #! /usr/bin/env python3
  2. import urllib.request
  3. proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
  4. opener = urllib.request.build_opener(proxy_support)
  5. urllib.request.install_opener(opener)
  6.  
  7. a = urllib.request.urlopen("http://www.jb51.net ").read().decode("utf8")
  8. print(a)

10、超时

  1. #! /usr/bin/env python3
  2. import socket
  3. import urllib.request
  4. # timeout in seconds
  5. timeout = 2
  6. socket.setdefaulttimeout(timeout)
  7. # this call to urllib.request.urlopen now uses the default timeout
  8. # we have set in the socket module
  9. req = urllib.request.Request('http://www.jb51.net /')
  10. a = urllib.request.urlopen(req).read()
  11. print(a)

Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)_python的更多相关文章

  1. Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)

    出自  http://www.jb51.net/article/93125.htm

  2. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  3. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的一些 ...

  4. 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)

      urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦,下面整理了一些关于urllib使用中的 ...

  5. Python3中使用PyMongo的方法详解

    前言 本文主要给大家介绍的是关于在Python3使用PyMongo的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍: MongoDB存储 在这里我们来看一下Python3下Mongo ...

  6. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  7. php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz)

    原文:php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz) 折腾了两天,dwz删除后,数据不能自动刷新,解决方案,直接看图  . 1. 删除.修改状态后无法刷新记录: 在dwz. ...

  8. PHP 中 16 个魔术方法详解

    PHP 中 16 个魔术方法详解   前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...

  9. 并发编程(六)Object类中线程相关的方法详解

    一.notify() 作用:唤醒一个正在等待该线程的锁的线程 PS : 唤醒的线程不会立即执行,它会与其他线程一起,争夺资源 /** * Object类的notify()和notifyAll()方法详 ...

随机推荐

  1. Spring Boot中使用logback日志框架

    说明:Spring Boot在最新的版本中默认使用了logback框架.一般来说使用时只需在classpath下创建logback.xml即可,而官方推荐使用logback-spring.xml替代, ...

  2. Eclipse运行Maven命令时出现:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.问题解决

    错误: -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment varia ...

  3. NoSQL之Memcached

    一.Memcached概念 Memcached是NoSQL产品之中的一个,是一个暂时性键值存储NoSQL数据库,过去被大量使用在互联网站点中,作为应用和数据库之间的缓存层,大大提高查询和訪问速度. M ...

  4. uva 10069 Distinct Subsequences 【dp+大数】

    题目:uva 10069 Distinct Subsequences 题意:给出一个子串 x 和母串 s .求子串在母串中的不同序列的个数? 分析:定义dp[i][j]:x 的前 i 个字母在 s 的 ...

  5. [React] PureComponent in React

    In this lesson, you will learn how to use PureComponent in React to reduce the number of times your ...

  6. Qt布局管理器的使用(一)

    曾经对Qt的布局管理器掌握的还不清楚,今天特意学习了下.感觉收获还挺大的,特意拿出来和大家分享. 首先.要明确布局管理器的用处,及使我们的界面看起来比較整洁.美化.另外一点就是为了使我们的控件可以更随 ...

  7. Android MediaRecorder录音与播放

    上一篇讲到了使用意图录音.这篇文章将使用MediaRecorder类来录音,从而提供很多其它的灵活性. 效果图: 源码奉上: <LinearLayout xmlns:android=" ...

  8. 自己定义控件 播放GIF动画

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  9. [经典面试题]在O(1)时间删除链表结点

    [题目] 给定链表的头指针和一个结点指针.在O(1)时间删除该结点.链表结点的定义例如以下: struct ListNode { int        value; struct ListNode*  ...

  10. 【转载】SOAP协议介绍

    SOAP是用在分散或分布的环境中交换信息的简单的协议,它是一个基于XML的协议,包括三个部分:封装定义了一个描述消息中包含什么内容以及如何处理它们的框架,编码规则用于表示应用程序定义的数据类型的实例, ...