Python3学习urllib的使用方法示例

urllib是python的一个获取url(Uniform Resource Locators,统一资源定址符)了,可以利用它来抓取远程的数据进行保存,本文整理了一些关于urllib使用中的一些关于header,代理,超时,认证,异常处理处理方法。

1.基本方法

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

  1. url:  需要打开的网址
  2. data:Post提交的数据
  3. timeout:设置网站的访问超时时间

直接用urllib.request模块的urlopen()获取页面,page的数据格式为bytes类型,需要decode()解码,转换成str类型。

from urllib import request
response = request.urlopen(r'http://python.org/') # <http.client.HTTPResponse object at 0x00000000048BC908> HTTPResponse类型
page = response.read()
page = page.decode('utf-8')

urlopen返回对象提供方法:

  1. read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作
  2. info():返回HTTPMessage对象,表示远程服务器返回的头信息
  3. getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
  4. geturl():返回请求的url

1、简单读取网页信息

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

2、使用request

urllib.request.Request(url, data=None, headers={}, method=None)

使用request()来包装请求,再通过urlopen()获取页面。

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

3、发送数据,以登录知乎为例

'''''
Created on 2016年5月31日 

@author: gionee
'''
import gzip
import re
import urllib.request
import urllib.parse
import http.cookiejar 

def ungzip(data):
  try:
    print("尝试解压缩...")
    data = gzip.decompress(data)
    print("解压完毕")
  except:
    print("未经压缩,无需解压") 

  return data 

def getXSRF(data):
  cer = re.compile('name=\"_xsrf\" value=\"(.*)\"',flags = 0)
  strlist = cer.findall(data)
  return strlist[0] 

def getOpener(head):
  # cookies 处理
  cj = http.cookiejar.CookieJar()
  pro = urllib.request.HTTPCookieProcessor(cj)
  opener = urllib.request.build_opener(pro)
  header = []
  for key,value in head.items():
    elem = (key,value)
    header.append(elem)
  opener.addheaders = header
  return opener
# header信息可以通过firebug获得
header = {
  'Connection': 'Keep-Alive',
  'Accept': 'text/html, application/xhtml+xml, */*',
  'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
  'Accept-Encoding': 'gzip, deflate',
  'Host': 'www.zhihu.com',
  'DNT': '1'
} 

url = 'http://www.zhihu.com/'
opener = getOpener(header)
op = opener.open(url)
data = op.read()
data = ungzip(data)
_xsrf = getXSRF(data.decode()) 

url += "login/email"
email = "登录账号"
password = "登录密码"
postDict = {
  '_xsrf': _xsrf,
  'email': email,
  'password': password,
  'rememberme': 'y'
}
postData = urllib.parse.urlencode(postDict).encode()
op = opener.open(url,postData)
data = op.read()
data = ungzip(data) 

print(data.decode())

4、http错误

import urllib.request
req = urllib.request.Request('http://www.lz881228.blog.163.com ')
try:
  urllib.request.urlopen(req)
except urllib.error.HTTPError as e:
print(e.code)
print(e.read().decode("utf8")) 

5、异常处理

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError 

req = Request("http://www.abc.com /")
try:
  response = urlopen(req)
except HTTPError as e:
  print('The server couldn't fulfill the request.')
  print('Error code: ', e.code)
except URLError as e:
  print('We failed to reach a server.')
  print('Reason: ', e.reason)
else:
  print("good!")
  print(response.read().decode("utf8"))

6、http认证

import urllib.request 

# create a password manager
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() 

# Add the username and password.
# If we knew the realm, we could use it instead of None.
top_level_url = "https://www.jb51.net /"
password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx') 

handler = urllib.request.HTTPBasicAuthHandler(password_mgr) 

# create "opener" (OpenerDirector instance)
opener = urllib.request.build_opener(handler) 

# use the opener to fetch a URL
a_url = "https://www.jb51.net /"
x = opener.open(a_url)
print(x.read()) 

# Install the opener.
# Now all calls to urllib.request.urlopen use our opener.
urllib.request.install_opener(opener)
a = urllib.request.urlopen(a_url).read().decode('utf8') 

print(a)

7、使用代理

import urllib.request 

proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener) 

a = urllib.request.urlopen("http://www.baidu.com ").read().decode("utf8")
print(a)

8、超时

import socket
import urllib.request 

# timeout in seconds
timeout = 2
socket.setdefaulttimeout(timeout) 

# this call to urllib.request.urlopen now uses the default timeout
# we have set in the socket module
req = urllib.request.Request('http://www.jb51.net /')
a = urllib.request.urlopen(req).read()
print(a)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python网络编程中urllib2模块的用法总结

    一.最基础的应用 import urllib2 url = r'http://www.baidu.com' html = urllib2.urlopen(url).read() print html 客户端与服务器端通过request与response来沟通,客户端先向服务端发送request,然后接收服务端返回的response urllib2提供了request的类,可以让用户在发送请求前先构造一个request的对象,然后通过urllib2.urlopen方法来发送请求 import ur

  • python中urllib模块用法实例详解

    本文实例讲述了python中urllib模块用法.分享给大家供大家参考.具体分析如下: 一.问题: 近期公司项目的需求是根据客户提供的api,我们定时去获取数据, 之前的方案是用php收集任务存入到redis队列,然后在linux下做一个常驻进程跑某一个php文件, 该php文件就一个无限循环,判断redis队列,有就执行,没有就break. 二.解决方法: 最近刚好学了一下python, python的urllib模块或许比php的curl更快,而且简单. 贴一下代码 复制代码 代码如下: #

  • 介绍Python的Urllib库的一些高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化 了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文 件,然后加载JS,CSS 等等,经过

  • Python3学习urllib的使用方法示例

    urllib是python的一个获取url(Uniform Resource Locators,统一资源定址符)了,可以利用它来抓取远程的数据进行保存,本文整理了一些关于urllib使用中的一些关于header,代理,超时,认证,异常处理处理方法. 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) url:  需要

  • Python3学习笔记之列表方法示例详解

    前言 本文主要给大家介绍了关于Python3列表方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1 使用[]或者list()创建列表 user = [] user = list() 2 使用list() 可以将其他类型转换成列表 # 将字符串转成列表 >>> list('abcde') ['a', 'b', 'c', 'd', 'e'] # 将元祖转成列表 >>> list(('a','b','c')) ['a', 'b', 'c']

  • Python3 搭建Qt5 环境的方法示例

    1.检查本机python 版本: 2.安装Qt5 执行如下指令: pip install PyQt5 -i https://pypi.douban.com/simple #在后面加上"-i https://pypi.douban.com/simple"表示使用豆瓣所提供的镜像 3.安装Qt5图形设计工具,指令如下: pip install PyQt5-tools -i https://pypi.douban.com/simple #工具包含(图形界面开发工具qt designer.翻译

  • Dlib+OpenCV深度学习人脸识别的方法示例

    前言 人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,但是可以确信的是真实环境中的识别率并没有那么乐观.现在虽然有一些商业应用如员工人脸识别管理系统.海关身份验证系统.甚至是银行人脸识别功能,但是我们可以仔细想想员工人脸识别管理,海关身份证系统的应用场景对身份的验证功能其实并没有商家吹嘘的那么重要,打个比方说员工上班的时候刷脸如果失败了会怎样,是不是重新识

  • Python3.X 线程中信号量的使用方法示例

    前言 最近在学习python,发现了解线程信号量的基础知识,对深入理解python的线程会大有帮助.所以本文将给大家介绍Python3.X线程中信号量的使用方法,下面话不多说,来一起看看详细的介绍: 方法示例 线程中,信号量主要是用来维持有限的资源,使得在一定时间使用该资源的线程只有指定的数量 # -*- coding:utf-8 -*- """ Created by FizLin on 2017/07/23/-下午10:59 mail: https://github.com

  • php反射学习之不用new方法实例化类操作示例

    本文实例讲述了php反射学习之不用new方法实例化类操作.分享给大家供大家参考,具体如下: 上一篇php反射入门示例简单介绍了 php 反射的几个常见类的使用方法,但是用反射能做些什么,你可能还是想象不到, 下面我稍微应用反射类来做点东西,大家知道实例化一个类需要用new 关键字,不用 new 可以吗?答案是可以的,用反射就能实现: 首先创建一个文件 student.php: <?php class Student { public $id; public $name; public funct

  • Python3通过chmod修改目录或文件权限的方法示例

    简单的介绍下linux文件权限 linux中,文件的权限分为"所有者.组.其他用户"三个角色,每个角色由3个bit位表示它的权限,3bit从左到右分别为读写执行三个权限,3bit的值范围为0~7.所以如果直接在linux执行chmod 777 xxx.sh代表,将xxx.sh文件赋予所有者.组.其他用户这三个角色对xxx.sh文件的读写执行权限. os的chmod python的os模块负责操作系统层面的操作.修改文件权限可以通过os的chmod方法来操作. os.chmod(path

  • MacBook m1芯片采用miniforge安装python3.9的方法示例

    因为m1芯片是arm版本的架构,以前在mac上的很多软件都是基于Intel架构的软件,apple开发了rossta2,可以在m1上运行intel架构的软件,但是性能会有损失 python的3.9版本已原生支持m1芯片,更多支持m1芯片的软件可以查看网址:https://isapplesiliconready.com/ 使用miniforge GitHub地址:https://github.com/conda-forge/miniforgeGitee 地址:https://gitee.com/ph

  • Go实现短url项目的方法示例

    首先说一下这种业务的应用场景: 1.把一个长url转换为一个短url网址 2.主要用于微博,二维码,等有字数限制的场景 主要实现的功能分析: 1.把长url的地址转换为短url地址 2.通过短url获取对应的原始长url地址 3.相同长url地址是否需要同样的短url地址 这里实现的是一个api服务 数据库设计 数据库的设计其实也没有非常复杂,如图所示: 这里有个设置需要主要就是关于数据库表中id的设计,需要设置为自增的 并且这里有个问题需要提前知道,我们的思路是根据id的值会转换为62进制关于

  • python 3利用BeautifulSoup抓取div标签的方法示例

    前言 本文主要介绍的是关于python 3用BeautifulSoup抓取div标签的方法示例,分享出来供大家参考学习,下面来看看详细的介绍: 示例代码: # -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 import BeautifulSoup import urllib.request import re #如果是网址,可以用这个办法来读取网页 #h

随机推荐