python中urllib包的网络请求教程


Posted in Python onApril 19, 2022

一、简介

  • 是一个 python 内置包,不需要额外安装即可使用
  • urllib 是 Python 标准库中用于网络请求的库,内置四个模块,分别是
  • urllib.request:用来打开和读取 url,可以用它来模拟发送请求,获取网页响应内容
  • urllib.error:用来处理 urllib.request 引起的异常,保证程序的正常执行
  • urllib.parse:用来解析 url,可以对 url 进行拆分、合并等
  • urllib.robotparse:用来解析 robots.txt 文件,判断网站是否能够进行爬取

二、发起请求

import urllib.request

# 方法一
resp = urllib.request.urlopen('http://www.baidu.com', timeout=1)
print(resp.read().decode('utf-8'))

# 方法二
request = urllib.request.Request('http://www.baidu.com')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

三、携带参数请求

  • 请求某些网页时需要携带一些数据
import urllib.parse
import urllib.request

params = {
'name':'autofelix',
'age':'25'
}

data = bytes(urllib.parse.urlencode(params), encoding='utf8')
response = urllib.request.urlopen("http://www.baidu.com/", data=data)
print(response.read().decode('utf-8'))

四、获取响应数据

import urllib.request

resp = urllib.request.urlopen('http://www.baidu.com')
print(type(resp))
print(resp.status)
print(resp.geturl())
print(resp.getcode())
print(resp.info())
print(resp.getheaders())
print(resp.getheader('Server'))

五、设置headers

import urllib.request

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
request = urllib.request.Request(url="http://tieba.baidu.com/", headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

六、使用代理

import urllib.request

proxys = urllib.request.ProxyHandler({
'http': 'proxy.cn:8080',
'https': 'proxy.cn:8080'
})

opener = urllib.request.build_opener(proxys)
urllib.request.install_opener(opener)

request = urllib.request.Request(url="http://www.baidu.com/")
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

七、认证登录

  • 有些网站需要携带账号和密码进行登录之后才能继续浏览网页
import urllib.request

url = "http://www.baidu.com/"
user = 'autofelix'
password = '123456'
pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
pwdmgr.add_password(None,url,user,password)

auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr)
opener = urllib.request.build_opener(auth_handler)
response = opener.open(url)
print(response.read().decode('utf-8'))

八、设置cookie

  • 如果请求的页面每次需要身份验证,我们可以使用 Cookies 来自动登录,免去重复登录验证的操作
import http.cookiejar
import urllib.request

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com/")

f = open('cookie.txt', 'a')
for item in cookie:
f.write(item.name+" = "+item.value+'\n')
f.close()

九、异常处理

from urllib import error, request

try:
resp = request.urlopen('http://www.baidu.com')
except error.URLError as e:
print(e.reason)

十、HTTP异常

from urllib import error, request

try:
resp = request.urlopen('http://www.baidu.com')
except error.HTTPError as e:
print(e.reason, e.code, e.headers, sep='\n')
except error.URLError as e:
print(e.reason)
else:
print('request successfully')

十一、超时异常

import socket, urllib.request, urllib.error

try:
resp = urllib.request.urlopen('http://www.baidu.com', timeout=0.01)
except urllib.error.URLError as e:
print(type(e.reason))
if isinstance(e.reason,socket.timeout):
print('time out')

十二、解析编码

from urllib import parse

name = parse.quote('飞兔小哥')

# 转换回来
parse.unquote(name)

十三、参数拼接

  • 在访问url时,我们常常需要传递很多的url参数
  • 而如果用字符串的方法去拼接url的话,会比较麻烦
from urllib import parse

params = {'name': '飞兔', 'age': '27', 'height': '178'}
parse.urlencode(params)

十四、请求链接解析

from urllib.parse import urlparse

result = urlparse('http://www.baidu.com/index.html?user=autofelix')
print(type(result))
print(result)

十五、拼接链接

  • 如果拼接的是两个链接,则以返回后面的链接
  • 如果拼接是一个链接和参数,则返回拼接后的内容
from urllib.parse import urljoin

print(urljoin('http://www.baidu.com', 'index.html'))

十六、字典转换参数

from urllib.parse import urlencode

params = {
'name': 'autofelix',
'age': 27
}
baseUrl = 'http://www.baidu.com?'
print(baseUrl + urlencode(params))

到此这篇关于python 包中的 urllib 网络请求教程的文章就介绍到这了!

Python 相关文章推荐
python调用cmd命令行制作刷博器
Jan 13 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
Python并行分布式框架Celery详解
Oct 15 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
python使用requests.session模拟登录
Aug 09 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
python SVD压缩图像的实现代码
Nov 05 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
Python unittest框架操作实例解析
Apr 13 Python
python APScheduler执行定时任务介绍
Apr 19 #Python
Python数据可视化之Seaborn的安装及使用
python 闭包函数详细介绍
Apr 19 #Python
Python  lambda匿名函数和三元运算符
Apr 19 #Python
Python使用mitmproxy工具监控手机 下载手机小视频
使用Python通过企业微信应用给企业成员发消息
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 #Python
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
vue实现购物车小案例
2019/09/27 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
Python机器学习logistic回归代码解析
2018/01/17 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python实现代码块儿折叠
2020/04/15 Python
专升本自我鉴定
2013/10/10 职场文书
在人间读书笔记
2015/06/30 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
2019感恩宣传标语!
2019/07/05 职场文书