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 相关文章推荐
Android应用开发中Action bar编写的入门教程
Feb 26 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
tensorflow中next_batch的具体使用
Feb 02 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
python二维图制作的实例代码
Dec 03 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
python基于机器学习预测股票交易信号
May 25 Python
Python 数据可视化之Matplotlib详解
Nov 02 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的String类代码
2010/04/20 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python实现基于POS算法的区块链
2018/08/07 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
中学生自我鉴定
2014/02/04 职场文书
2014年终个人总结报告
2015/03/09 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
行政处罚告知书
2015/07/01 职场文书
初中团支书竞选稿
2015/11/21 职场文书
银行培训心得体会范文
2016/01/09 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang