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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
Python读写docx文件的方法
May 08 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
最小二乘法及其python实现详解
Feb 24 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 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
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
php中hashtable实现示例分享
2014/02/13 PHP
php限制文件下载速度的代码
2015/10/20 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
基于canvas实现手写签名(vue)
2020/05/21 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
python中定义结构体的方法
2013/03/04 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
2014厂务公开实施方案
2014/02/17 职场文书
大学应届生的自我评价
2014/03/06 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
高三英语教学反思
2016/03/03 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS